Propojení dvou tabulek MySQL. – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Propojení dvou tabulek MySQL. – PHP – Fórum – Programujte.comPropojení dvou tabulek MySQL. – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
hustoles0
Duch
18. 6. 2013   #1
-
0
-

Zdravím, potřebuji prosím poradit s propojením tabulek. Vysvětlím

Tabulka 1:

id | nazev | id druh

Tabulka 2: 

id | druh

Když propojím tabulky: vložím | id | z tabulky 2 do | id druh | do tabulky 1. Tak jsem schopný pracovat s tím že název z tabulky 1 má nějaký druh z tabulky 2. 

Ale co když chci mít možnost aby název z tabulky 1 mohl mít více záznamů druh? Mám vložit více id údajů z tabulky dvě? A pak následně rozdělit při výpisu?

Díky za radu!

Nahlásit jako SPAM
IP: 77.48.205.–
Reklama
Reklama
survik1
~ Moderátor
0
Posthunter
18. 6. 2013   #2
-
0
-

Teď nevím, jestli má jít o sloučení dvou tabulek do jedné, nebo o nějakou subtabulku. Jestli je to případ b), pak stačí rozšířit druhou tabulku (nebo první, moc se v dotazu neorientuji) o sloupec idTable kde bude přiřazené potřebné id z druhé tabulky. Pokud jsem mimo, tak prosím o nějaké upřesnění dotazu, pokud možno s konkrétním příkladem, ať se lépe chytám :)

Nahlásit jako SPAM
IP: 147.32.98.–
Život je jen hra, která se nedá vyhrát.
hustoles0
Duch
18. 6. 2013   #3
-
0
-

#2 survik1
dotaz jsem přeformuloval, snad bude pochopitelnější. Jinak se nejedná o sloučení / spojeni. 

Nahlásit jako SPAM
IP: 77.48.205.–
Řešení
survik1
~ Moderátor
0
Posthunter
18. 6. 2013   #4
-
0
-
Vyřešeno Nejlepší odpověď

Ach, už se chytám. Pokud potřebuješ víc id, řeším to přes pole (http://php.net/manual/en/function.serialize.php) a pak s ním dál pracuji. Nicméně, jestli máš jen takhle jednoduché tabulky, pak je ani nemusíš dělit na dvě, ne?

Nahlásit jako SPAM
IP: 147.32.98.–
Život je jen hra, která se nedá vyhrát.
hustoles0
Duch
18. 6. 2013   #5
-
0
-

#4 survik1
Ono to nakonec nebude tak jednoduché, to byl jen příklad. Hodnoty v tabulce 2 | druh | se budou měnit přidávat / mazat. A databáze bude vypadat trošku jinak. Vyzkouším tedy dát id z tabulky 2 do pole a zapsat do tabulky 1 | id druh | a při práci (výpis, editace) pole rozložit a zapsat zpět. 

Tak se s tím normálně pracuje? 

Nahlásit jako SPAM
IP: 77.48.205.–
survik1
~ Moderátor
0
Posthunter
18. 6. 2013   #6
-
+1
-
Zajímavé

Ano, prostě když potřebuješ, tak si to rozkládáš a pak zase skládáš. Příp. můžeš použíš klíčové slovo LIKE, pokud chceš jenom zjistit, jestli se daná hodnota vyskytuje.

Nahlásit jako SPAM
IP: 147.32.98.–
Život je jen hra, která se nedá vyhrát.
hustoles0
Duch
19. 6. 2013   #7
-
0
-

#6 survik1
OK, díky. Vyzkouším to....

Nahlásit jako SPAM
IP: 77.48.206.–
prdelnatý anděl
~ Anonymní uživatel
33 příspěvků
19. 6. 2013   #8
-
0
-

Standardní řešení je třetí tabulka.

Tabulka `produkty`:
id | produkt

Tabulka `druhy`:
id | druh

Tabulka `produkty_druhy`:
id | produkt_id | druh_id

Serializace v tomto případě není čisté řešení, protože s ní nedokážeš jednoduše vyhledávat a filtrovat podle vybraného druhu.
 

Nahlásit jako SPAM
IP: 213.151.77.–
survik1
~ Moderátor
0
Posthunter
20. 6. 2013   #9
-
0
-

#8 prdelnatý anděl
Nicméně toto zvyšuje počet nutných dotazů a zátěž na MySQL. Hodí se to jen u menších projektů bez potřebné optimalizace.

Nahlásit jako SPAM
IP: 147.32.98.–
Život je jen hra, která se nedá vyhrát.
prdelnatý anděl
~ Anonymní uživatel
33 příspěvků
20. 6. 2013   #10
-
+1
-
Zajímavé

Počet nutných dotazů to nezvyšuje, seznam druhů můžeš získat jediným dotazem. Přidaná zátěž na MySQL spočívá v použití agregačních funkcí, na něž je MySQL optimalizované. Naopak, hledání podle druhů bude neoptimalizované a bude zatěžovat jak MySQL, tak PHP. Toto řešení se hodí pro malé i velké projekty.

Řešení se serializací:

  • pracuje se špatným návrhem databáze (ta není normalizovaná)
  • je závislé na implementaci serializace (míchá v sobě databázovou a programovou část)
  • je navržená ad hoc a způsobí problémy při případné přechodu na jiný skriptovací jazyk nebo změně formátu serializace
  • nemá vyřešené vyhledání a filtrování podle druhů

Nahlásit jako SPAM
IP: 213.151.77.–
survik1
~ Moderátor
0
Posthunter
21. 6. 2013   #11
-
0
-

Serializace byl pouze příklad, v praxi používám konstrukce dle své potřeby. Vyhledávání a filtrování pomocí onoho LIKE, jak jsem psal. Ale jinak shledávám argumenty rozumnými.

Nahlásit jako SPAM
IP: 147.32.98.–
Život je jen hra, která se nedá vyhrát.
prdelnatý anděl
~ Anonymní uživatel
33 příspěvků
22. 6. 2013   #12
-
0
-

#11 survik1
Můžeš uvést příklad SQL pro vyhledávání podle druhů pomocí LIKE?

Nahlásit jako SPAM
IP: 213.151.77.–
Kubina
~ Anonymní uživatel
17 příspěvků
24. 6. 2013   #13
-
0
-

#12 prdelnatý anděl
Příklad serializace je opravdu trochu nešťastný...každopádně zapsat to jako string a oddělit id třeba čárkou "1,2,3"...

CONCAT(",", id_druh, ",") LIKE "%,1,%"

...řešení na pudla

Jediné možné při dohledání dat z každé strany je opravdu jen jedno ... třetí vazební tabulka (řešení od prdelnatýho anděla), jen zrušit id a primární klíč nastavit na zbylé dva sloupečky.

Nahlásit jako SPAM
IP: 81.0.216.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 75 hostů

Podobná vlákna

Propojení dvou tabulek — založil Pavelv

Propojení tabulek + výpočty — založil MeFi100

Porovnání dvou tabulek — založil WeeHool

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý