Autor | Zpráva | ||
---|---|---|---|
ulalaa Profil * |
#1 · Zasláno: 16. 12. 2022, 19:57:01
Ahoj, řeším teď věc, kterou jsem do teď neřešil a tak si moc nevím rady - když načítám databázová data z jedné tabulky, můžu v klidu využít
echo $row['id']; . Jak mám ale postupovat, pokud načítám z více tabulek, obě tabulky obsahují položku id a já potřebuji vypsat ID jen u jedné z nich, přičemž u druhé potřebuji přes ID filtrovat výsledky?
Vytvořil jsem tohle - skutečné názvy jsem nahradil a vyřadil z kódu html prvky. Pro představu - jde o tabulku, v jejímž levém sloupci je jediná hodnota z table2, v pravo jsou pak pod sebou všechny záznamy ID a jiné pole z table1. <?php /* načtu data z table2 a table1; table2 obsahuje a bude obsahovat pouze jeden záznam, takže ho selektuju pomocí ID = 1*/ $sql="SELECT * FROM table2, table1 WHERE `table2`.`id` = '1'"; $result=mysqli_query($db,$sql); $row=mysqli_fetch_assoc($result); /* vypsání jediného záznamu z table2 */ echo $row['table2row'] ; /* vypsání všech záznamů z table1 */ if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { /* první hodnota obsahuje ID, ale ID obshuje nejen table1, ale i table2 */ echo $row['table1-ID'] .") ". $row['table1-dalsi-hodnota'] ."<hr>"; }} ?> Tenhle kód funguje, ale nezobrazuje první záznam u table1. |
||
Kajman Profil |
#2 · Zasláno: 16. 12. 2022, 20:10:39
Přijde mi, že si pletete cross join s unionem. Když dáte cross join (zapsané jako table2, table1), tak nedáváte záznamy za sebe do více řádků, ale děláte kombinace
všech vyhovujícíh řádků z jedné a druhé tabulky. Možná opravdu chcete cross join a u prvního řádku navíc vypsat i nějaký sloupec, co se opakuje. Pak si musíte udělat podmínku ve while cyklu, že to první záznam, nebo místo while použít do while, jinak si při vstupu do cyklu načtete už druhý řádek. Pokud chcete z table2 jen jeden řádek a z table1 všechny, tak si jednoduše udělejte dva dotazy. Jen tak mimochodem, kolize lze řešit aliasy sloupců (v ukázce jsou i aliasy tabulek, to je potřeba, když se připojuje dvakrát ta stejná tabulka), kdybyste to potřeboval do jiných dotazů, kde to dává smysl... SELECT t1.id AS t1_id, t1.nazev AS t1_nazev, t2.id AS t2_id, t2.nazev AS t2_nazev FROM table1 AS t1 JOIN table2 AS t2 ON t1.kategorie = t2.id |
||
Časová prodleva: 3 roky
|
0