Autor | Zpráva | ||
---|---|---|---|
moskyt Profil |
#1 · Zasláno: 3. 9. 2013, 23:05:16
Zdravím,
php se učím a občas narazím na problém se kterým se nevím rady. Snažím se hledat na internetu a problém si nastudovat, ale tuto věc prostě nemohu dohledat a vyřešit, tak se ptám zde. Už delší dobu se potýkám s problémem jak správně pracovat s daty databáze, konkrétně: Mám databázi eshopu, mám v ní dvě tabulky, jedna obsahuje id produktu a cenu, druhá obsahuje id produktu, název produktu a popis produktu. Jak nejlépe vytáhnout id všech produktů s jejich popisem? Dělám to takto: $sql_product = ("SELECT * FROM product"); $vysledek_product = MySQL_Query($sql_product); while($zaznam_product = MySQL_Fetch_Array($vysledek_product)) { $product_id[] = $zaznam_product[id]; } $sql_product_desc = ("SELECT * FROM product_description"); $vysledek_product_desc = MySQL_Query($sql_product_desc); while($zaznam_product_desc = MySQL_Fetch_Array($vysledek_product_desc)) { $product_desc[] = $zaznam_product_desc[description]; $product_id_desc[] = $zaznam_product_desc[id]; } $pocetprvku = count($product_id); $i=0; foreach ($product_id as $polozka) { while ($product_id < $i) { if ($polozka == ($product_id_desc[$i])) echo $polozka." - ".$polozka_desc[$i]; $i++; } } Čili nejdřív si vlezu do jedné tabulky kde je ID produktu, všechny ID si naskládám do pole $product_id, následně si vlezu do tabulky kde je ID produktu a popis, všechen popis si naskládám do pole $product_desc a ID do pole $product_id_desc, potom si pomocí foreach projdu pole $product_id a uvnitř tohoto cyklu si procházím pomocí while a identifikátoru $i pole z druhé tabulky a pokud se ID rovnají vypíšu si ID + název produktu. Funguje to v pohodě, ale je to hrozně krkolomný postup. Potřebuji si vytáhnout ID z jedné tabulky a z druhé tabulky si k tomuto ID vypsat název. Dá se to dělat nějak jednodušeji aniž bych musel lézt sólo do obou tabulek, cpát data do polí a ty pole si potom v několika cyklech procházet a porovnávat? Předem díky za radu. |
||
Kajman Profil |
#2 · Zasláno: 3. 9. 2013, 23:30:12
V tomto případě je asi nejjednodušší spojení.
SELECT p.*, d.description FROM product p LEFT JOIN product_description d ON p.id = d.id |
||
Kubo2 Profil |
moskyt:
„Dá se to dělat nějak jednodušeji“ Áno dá, a to tak, že na produkty ti stačí jedna sólo tabuľka. Čili (čiže): Tabuľka produktyCREATE TABLE IF NOT EXISTS `produkty`( `produkt_id` int(32) NOT NULL AUTO_INCREMENT, `produkt_nazov` varchar(30) NOT NULL, `produkt_popis` varchar(150) NOT NULL, `produkt_cena` float NOT NULL, PRIMARY KEY(`produkt_id`) ) ENGINE=MyISAM; SELECT * FROM produkty ).
|
||
moskyt Profil |
#4 · Zasláno: 4. 9. 2013, 08:36:06
Kubo2: no, zapomněl jsem napsat, že se jedná stávající systém...
|
||
Kubo2 Profil |
#5 · Zasláno: 4. 9. 2013, 09:16:49
moskyt:
V takom prípade viď [#2] od Kajmana. |
||
moskyt Profil |
#6 · Zasláno: 4. 9. 2013, 10:32:25
Kajman: bezva, to je presne ono, diky...
|
||
moskyt Profil |
#7 · Zasláno: 4. 9. 2013, 15:44:15
Ještě chci poprosit o radu. JOIN jsem si nastudoval, ale potřebuji ještě složitější spojení tabulek se kterým si nevím rady, potřebuji vypsat id produktu, cenu produktu a kategorii produktu, s tím že tyto údaje jsou ve čtyřech tabulkách takto:
tabulka produkty | produkt_id | produkt_cena | | 1 | 548 | | 2 | 1245 | | 3 | 658 | tabulka nazvy_pruduktu | produkt_id | produkt_nazev | | 1 | kabelka modra | | 2 | cepice zelena | | 3 | boty cerne | tabulka nazvy_kategorii | kategorie_id | kategorie_nazev | | 1 | modni doplnky | | 2 | boty | tabulka produkty_kategorie | produkt_id | kategorie_id | | 1 | 1 | | 2 | 1 | | 3 | 2 | potřebuji vypsat id produktu, název produktu, cenu produktu, název kategorie, nemám problém si spojit tabulky produkty, nazvy_pruduktu a produkty_kategorie s podmínkami produkty.produkt_id = nazvy_pruduktu.produkt_id a produkty.produkt_id = produkty_kategorie.produkt_id si vypsat čísla produktu s jejich názvy, cenami a čísly kategorií... ale nevím si rady s tím, jak ze čtvrté tabulky dostat názvy kategorií pro jednotlivé produkty. |
||
Kajman Profil |
#8 · Zasláno: 4. 9. 2013, 15:54:47
Bude to stejné, podmínka u tohoto spojení bude
produkty_kategorie.kategorie_id = nazvy_kategorii.kategorie_id Pokud to nebude fungovat, pošlete sem sestavý dotaz, třeba bude potřeba jen drobná korekce. Doufám, že si neděláte pro každý sloupec samostatnou tabulku. |
||
peta Profil |
#9 · Zasláno: 4. 9. 2013, 15:56:26
SELECT b.produkt_nazev, c.kategorie_nazev, d.produkt_cena FROM produkty_kategorie a LEFT JOIN nazvy_pruduktu b ON b.produkt_id=a.produkt_id LEFT JOIN nazvy_kategorii c ON c.kategorie_id=a.kategorie_id LEFT JOIN produkty d ON d.produkt_id=a.produkt_id |
||
juriad Profil |
#10 · Zasláno: 4. 9. 2013, 16:05:13
Představ si to jako takového pavouka:
produkty --JOIN-- nazvy_produktu \ \-JOIN-- produkty_kategorie --JOIN-- nazvy_kategorii |
||
moskyt Profil |
#11 · Zasláno: 4. 9. 2013, 18:25:42
skvělé, díky všem...
|
||
moskyt Profil |
#12 · Zasláno: 5. 9. 2013, 19:19:16
tak vše mi funguje jak má... ještě mám poslední dotaz, dá se na tomto příkladu nějak odladit aby se nevybíraly duplicitní položky?
|
||
nemeja Profil |
#13 · Zasláno: 5. 9. 2013, 19:44:09
Pomůže ti GROUP BY.
|
||
Kajman Profil |
#14 · Zasláno: 5. 9. 2013, 19:46:04
moskyt:
A když je výrobek ve více kategoriích, tak se má vybrat jen jedna náhodně? Pokud chcete všechny kategorie, jak je několik způsobů zpracování viz. http://php.vrana.cz/srovnani-dotazu-do-zavislych-tabulek.php |
||
moskyt Profil |
#15 · Zasláno: 5. 9. 2013, 22:08:36
ve více kategoriích nikdy není... jde jen o to že chci vybrat položky zboží a k nim patřičné parametry, ale tak aby všechny byly unikátní (některé se opakují a ve výpise vznikají duplicity)
|
||
peta Profil |
#16 · Zasláno: 6. 9. 2013, 09:21:32
|
||
Časová prodleva: 11 let
|
0