Autor | Zpráva | ||
---|---|---|---|
smiesek Profil |
Můžete mě prosím navést, nedaří se mi přijít na základní JOIN pro výpis dat z tabulky, kdy se snažím o výpis souvisejících produktů:
mám tabulku se sloupci: id | hlavni_id | souvisejici_id hlavní a související produkty k sobě přiřazuju pomocí formuláře option. Mám problém nyní vypsat kompletní informace, které se vztahují k hlavnímu a souvisejícímu produktu, kdy jsem se dostala do následující podoby, která mi však výpis končí chybou: SELECT so.id, so.hlavni_id, so.souvisejici_id FROM souvisejici AS so LEFT JOIN kosik AS ko ON so.hlavni_id=ko.id LEFT JOIN kosik AS ko ON so.souvisejici_id=ko.id Pokud vynechám LEFT JOIN kosik AS ko ON so.souvisejici_id=ko.id Ten option formuláře tahám vlastně z jedné tabulky kosik, samozřejmě mám podmínku, aby se nepřiřadil jak hlavní tak související jedno a totéž produkt. Nevím jak to vhodně pojmenovat, ani popsat, ale budu doufat, že je alespoň trochu srozumitelné, oč mi jde a v čem mám problém. |
||
nightfish Profil |
#2 · Zasláno: 4. 10. 2016, 19:14:12
Nemůžeš použít dvakrát ten stejný alias, když připojuješ stejnou tabulku vícekrát. Takže řešení:
SELECT so.id, so.hlavni_id, so.souvisejici_id FROM souvisejici AS so LEFT JOIN kosik AS ko_hlavni ON so.hlavni_id=ko_hlavni.id LEFT JOIN kosik AS ko_souvisejici ON so.souvisejici_id=ko_souvisejici.id (Mimochodem takto ten dotaz nedává moc smysl, protože za SELECTem máš uvedené sloupce pouze z tabulky souvisejici a ne z těch připojených tabulek...) |
||
smiesek Profil |
nightfish:
děkuju prostuduju, jinak mi šlo právě o ten alias, to ostatní mi funguje, proto jsem dala jen tu část, kde jsem si myslela, že dělám chybu |
||
smiesek Profil |
#4 · Zasláno: 5. 10. 2016, 03:08:42
tak ještě mi to stále vypisuje chybu, protože nyní nevím, jak použít tu připojenou tabulku:
LEFT JOIN produkt AS pr ON pr.hlavni_id=pr.id v tabulce: produkt jsou všechny informace o produktu, odkama je vkládám do tabulky: kosik a z košíku to jde do tabulky: souvisejici takže zase budu muset pro produkt definovat 2x alias? LEFT JOIN produkt AS pr ON pr.hlavni_id=pr.id LEFT JOIN produkt AS pr ON pr.vedlejsi_id=pr.id |
||
Casero Profil |
#5 · Zasláno: 5. 10. 2016, 07:55:14
smiesek:
„takže zase budu muset pro produkt definovat 2x alias?“ Ano. Je potřeba tabulky odlišit, i když se jedná o stejnou tabulky -> nebo spíše u nich alias musí být, aby je šlo odlišit. |
||
smiesek Profil |
#6 · Zasláno: 5. 10. 2016, 18:11:53
jak mám prosím definovat tu připojenou tabulku? :(
LEFT JOIN produkt AS pr ON pr.hlavni_id=pr.id LEFT JOIN produkt AS pr ON pr.vedlejsi_id=pr.id nebo LEFT JOIN produkt AS pr_h ON pr.hlavni_id=pr.id LEFT JOIN produkt AS pr_v ON pr.vedlejsi_id=pr.id vůbec nevím co s tím nic to nevypisuje |
||
nightfish Profil |
#7 · Zasláno: 5. 10. 2016, 19:50:51
smiesek:
„vůbec nevím co s tím nic to nevypisuje“ Dobrým začátkem by bylo poslat celý dotaz, protože nikdo z nás nedisponuje věšteckou koulí. Nicméně pokud je v dotazu nějaká tabulka s aliasem pr, která má sloupce hlavni_id a vedlejsi_id, tak by mohlo pomoct: LEFT JOIN produkt AS pr_h ON pr.hlavni_id=pr_h.id LEFT JOIN produkt AS pr_v ON pr.vedlejsi_id=pr_v.id |
||
smiesek Profil |
#8 · Zasláno: 6. 10. 2016, 06:01:17
SELECT so.id, so.hlavni_id, so.souvisejici_id, vy.nazev AS vyrobce, pr.oznaceni AS produkt, pr.rok AS rok, ko.url AS url, na1.popis, na1.nazev, na2.nazev AS naz2, na3.nazev AS naz3, na4.nazev AS naz4 FROM souvisejici AS so LEFT JOIN kosik AS ko_hlavni ON so.hlavni_id=ko_hlavni.id LEFT JOIN kosik AS ko_souvisejici ON so.souvisejici_id=ko_souvisejici.id LEFT JOIN produkt AS pr ON ko.produkt_id=pr.id LEFT JOIN vyrobce AS vy ON pr.vyrobce_id=vy.id LEFT JOIN nazev AS na1 ON pr.nazev1_id=na1.id LEFT JOIN nazev AS na2 ON pr.nazev2_id=na2.id LEFT JOIN nazev AS na3 ON pr.nazev3_id=na3.id LEFT JOIN nazev AS na4 ON pr.nazev4_id=na4.id Pracuju s tabulka: 1) vyrobce, kterého následně využiju pro přiřazení do tabulky produkt 2) produkt, do které vkládám data o produktu jako je výrobce, rok, název apod. 3) kosik, do kterého vkládám již vytvořený řádek produkt, kde přiřazuju obrázek, cenu apod. 4) souvisejici, kde vkládám 2 produkty, které vybírám z tabulky košík a tu mám problém s výše uvedeným dotazem, aby se mi vypsal záznam: hlavni | souvisejici |
||
Casero Profil |
#9 · Zasláno: 6. 10. 2016, 08:44:34
smiesek:
Podle toho dotazu to bohužel vypadá na velmi špatný návrh databáze. Pokud je projekt v rané fázi, tak by stálo za zvážení upravit. Nicméně, co se týče čistě dotazu (krom zatajeneho vyznamu tabulky nazev je tam spousta chyb): SELECT so.id, so.hlavni_id, so.souvisejici_id, vy_h.nazev AS vyrobce_hlavni, pr_v.oznaceni AS produkt, pr_v.rok AS rok, ko_hlavni.url AS url FROM souvisejici AS so LEFT JOIN kosik AS ko_hlavni ON so.hlavni_id=ko_hlavni.id LEFT JOIN kosik AS ko_souvisejici ON so.souvisejici_id=ko_souvisejici.id LEFT JOIN produkt AS pr_h ON ko_hlavni.produkt_id=pr_h.id LEFT JOIN produkt AS pr_v ON ko_souvisejici.produkt_id=pr_v.id LEFT JOIN vyrobce AS vy_h ON pr_h.vyrobce_id=vy_h.id LEFT JOIN vyrobce AS vy_v ON pr_v.vyrobce_id=vy_v.id |
||
smiesek Profil |
Casero:
„vy_h.nazev AS vyrobce_hlavni, pr_v.oznaceni AS produkt, pr_v.rok AS rok, ko_hlavni.url AS url“ nechápu prosím tuto část, chvilku jako hlavní, pak zase vedlejší... nazev není utajená, viz. 2) produkt, do které vkládám data o produktu jako je výrobce, rok, název apod. |
||
Casero Profil |
#11 · Zasláno: 7. 10. 2016, 08:17:56
smiesek:
„nechápu prosím tuto část, chvilku jako hlavní, pak zase vedlejší...“ Pouze ukázka. Je na tobě, jaké sloupce budeš potřebovat. Na začátek si tam můžeš dát znak * a zobrazit všechny sloupce, co dostaneš. „2) produkt, do které vkládám data o produktu jako je výrobce, rok, název apod.“ Tak trošku se ti tam pletou atributy a tabulky. :) |
||
smiesek Profil |
#12 · Zasláno: 8. 10. 2016, 05:12:48
Casero:
tak už mi je to srozumitelné a už mi to funguje :-) Je to triviální a já jsem za tím hledala složitosti. Chyba byla hned jako první ta, že jsem jak pro hlavni tak vedlejsi produkt používala stejné proměnné, a to i v případě, že jsem dle doporučení odlišila aliasy, ale s těmi jsem dále nepracovala pro výpis záznamů do stránky echo $vyrobce_hlavni, $vyrobce_vedlejsi; Takže nakopnutí, že každá proměnná musí jedinečná, pomohlo :-) smiesek: „vy_h.nazev AS vyrobce_hlavni, pr_v.oznaceni AS produkt, pr_v.rok AS rok, ko_hlavni.url AS url“ vy_h.nazev AS vyrobce_hlavni, pr_h.oznaceni AS produkt_hlavni, pr_h.rok AS rok_hlavni, url_h.url AS url_hlavni, vy_v.nazev AS vyrobce_vedlejsi, pr_v.oznaceni AS produkt_vedlejsi, pr_v.rok AS rok_vedlejsi, url_v.url AS url_vedlejsi |
||
Časová prodleva: 8 let
|
0