Lekérdezett táblanevek tábláiból lekérdezés

Lekérdezett táblanevek tábláiból lekérdezés
2018-10-30T00:16:02+01:00
2018-10-31T06:05:31+01:00
2022-10-15T21:35:31+02:00
steak
Sziasztok!

Egy táblában tárolt táblanevek lekérdezéséből szeretnék a neveknek megfelelő táblákból lekérdezni.

$sql = "select * from tablanevtar"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)) { $sql2 = "select * from `".$row['tablanevek'].",` order by mezo1"; }
Segítségeteket köszönöm!
Mutasd a teljes hozzászólást!
Akkor az első query eredményeiből gyűjtsd össze a táblaneveket pl. egy tömbbe, majd (ha van legalább 1 táblanév) fűzd össze ezt a tömböt vesszővel és futtasd a második query-t ez alapján.
Valami ilyesmi:

(...) $tables = array(); while ($row = mysql_fetch_assoc($res)) { $tables []= $row['tablanev_mezo_neve']; } if(count($tables) > 0) { $sql2 = "select * from ".implode(",", $tables); $res2 = mysql_query($sql2); (...) }
Mutasd a teljes hozzászólást!

  • Hali!

    Egy táblában tárolt táblanevek lekérdezéséből szeretnék a neveknek megfelelő táblákból lekérdezni.

    Rendben, tedd. De mi a kérdés/probléma? A beidézett forrással kapcsolatban: a „második” lekérdezést nem futtatod, csak összeállítod.

    Továbbra sem értem (a korábbi témáddal egyetemben), hogy mi értelme ennek. Szerintem, inkább írd le a feladatot magát, mert látatlanban azt merem mondani, hogy iszonyatosan optimalizálatlan megoldáson agyalsz. Arról már nem is beszélve, hogy a mysql_* lehetőséget is el kellene felejteni 2018-ban (helyette mysqli-t vagy PDO-t használj).

    Mutasd a teljes hozzászólást!
  • Egyelőre a korábbi és a mostani feladatát is csak valami über-általános fejlesztésnél látom indokoltnak, pl. valami egyedi fw orm/migration (mysql implementációs) szekciójánál, vagy valami saját (my)sql admin-jellegű fejlesztésnél, de mivel mind a 2 kérdésénél gyakorlatilag egyszerű SQL szövegek konkatenációjánál (majd futtatásánál és az eredmény feldolgozásánál) akadt el, ezért a tudást kevésnek érzem egy ilyen jellegű feladathoz.
    Minden más esetben szinte biztos vagyok benne, hogy a kód kuka lesz előbb vagy utóbb... persze, ha ez az egész csak próbálkozás/tanulás/gyakorlás, akkor igazából mindegy.
    Mutasd a teljes hozzászólást!
  • Hello! A célom (röviden) az lenne, hogy könnyebben értsen meg valamit egy felhasználó! Most nem az a cél, hogy a fejlesztők ajánljanak jobb megoldást ... A gondom az, hogy nem működik :( Futtatom a másodikat is :/
    <select name="">
    <? $sql = "select * from tablanevtar"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)) { /* a $row['tablanevek'] eredménye: tablanev1 tablanev2 tablanev3 a következő lekérdezés ezekben a táblákban kellene, hogy keressen! */ $sql2 = "select * from `".$row['tablanevek'].",` order by mezo1"; } $res2 = mysql_query($sql2); while ($row2 = mysql_fetch_assoc($res2)) { <option value="<?echo $row2['mezo1']?>"><?echo $row2['mezo1']?></option> } ?> </select>
    Mutasd a teljes hozzászólást!
  • Futtatom a másodikat is

    Ja, a cikluson kívül... az $sql2 pedig belül kap értéket.
    Mutasd a teljes hozzászólást!
  • Igaz, de így se :(

    while ($row = mysql_fetch_assoc($res)) { /* a $row['tablanevek'] eredménye: tablanev1 tablanev2 tablanev3 a következő lekérdezés ezekben a táblákban kellene, hogy keressen! */ $sql2 = "select * from `".$row['tablanevek'].",` order by mezo1"; $res2 = mysql_query($sql2); while ($row2 = mysql_fetch_assoc($res2)) { <option value="<?echo $row2['mezo1']?>"><?echo $row2['mezo1']?></option> } }
    Mutasd a teljes hozzászólást!
  • Megtanulhatnál hibát keresni...
    Pl. printeld ki a az $sql2-t mielőtt futtatod, és ellenőrizd, hogy (mysql)szintaktikailag helyes-e!

    Ez a rész pl. tuti nem lesz jó :

    ...`".$row['tablanevek'].",`...
    Mutasd a teljes hozzászólást!
  • Köszönöm a segítséget!

    Ha az első lekérdezésnek csak egy eredménye van akkor működik, 
    gondolom a vessző használatával lesz a gond.

    Lenne tanácsod?
    Mutasd a teljes hozzászólást!
  • Lenne:
    1.) Írd meg (kézzel), hogy milyen lekérdezést akarsz generálni N db. (pl. 3) táblanév esetén!
    2.) Teszteld, hogy ez a konkrét lekérdezés működik-e!
    3.) Módosítsd a programodat úgy, hogy ilyen sql-t állítson elő!

    Amennyiben az 1-2 pont nem megy, akkor inkább tanulj még (My)SQL-ül, mielőtt "SQL generátort" írsz!
    Mutasd a teljes hozzászólást!
  • Megírva is működik.

    Valószínűleg a tagolás miatt nem megoldható
    Mutasd a teljes hozzászólást!
  • Valószínűleg a tagolás miatt nem megoldható

    Ezt fejtsd ki!

    Megírva is működik.

    Nagyszerű, akkor írd meg ide is, hogy lássuk végre, hogy mi lenne a konkrét cél!
    Mutasd a teljes hozzászólást!
  • while ($row = mysql_fetch_assoc($res)) { /* a $row['tablanevek'] eredménye: tablanev1 tablanev2 tablanev3 a következő lekérdezés ezekben a táblákban kellene, hogy keressen! */ $sql2 = "select * from tablanev1, tablanev2, tablanev3"; $res2 = mysql_query($sql2); while ($row2 = mysql_fetch_assoc($res2)) { <option value="<?echo $row2['mezo1']?>"><?echo $row2['mezo1']?></option> } }
    Mutasd a teljes hozzászólást!
  • A $row['tablanevek'] egyszerre csak 1 db. tábla nevét tartalmazza, vagy valami szeparátorral (pl. vessző) elválasztott táblanév-listát?

    Írd meg ide a következő kód kimenetét:

    while ($row = mysql_fetch_assoc($res)) { echo $row['tablanevek']."<br>"; }
    Mutasd a teljes hozzászólást!
  • A kimenet nem egy record :(
    A táblanevek recordonként vannak letárolva, és ez egyéb szempont miatt csak így lenne jó!
    Mutasd a teljes hozzászólást!
  • Akkor az első query eredményeiből gyűjtsd össze a táblaneveket pl. egy tömbbe, majd (ha van legalább 1 táblanév) fűzd össze ezt a tömböt vesszővel és futtasd a második query-t ez alapján.
    Valami ilyesmi:

    (...) $tables = array(); while ($row = mysql_fetch_assoc($res)) { $tables []= $row['tablanev_mezo_neve']; } if(count($tables) > 0) { $sql2 = "select * from ".implode(",", $tables); $res2 = mysql_query($sql2); (...) }
    Mutasd a teljes hozzászólást!
  • A tábla neveket  adja, és dolgozik a select, csak egy kérdés: hogy tennél bele feltételt?

    $sql2 = "select * from ".implode(",", $tables);
    $sql2 .=" where ....  mindegy, bármilyen feltétel lehet!
    Mutasd a teljes hozzászólást!
  • Most erre mit mondjak?
    Fogalmam sincs, hogy milyen mezők vannak még, amire lehetne szűrni, de mivel azt mondtad, hogy "bármilyen feltétel lehet", tessék:

    where 1=1
    Mondjuk nem is értem... ha több táblából kérdezel le, akkor azokat normálisan kellene "összekötni" egy megfelelő where-el (pl. kulcsok mentén), különben lesz egy marha nagy descartes szorzatod, aminek nem sok értelme van.

    Szinte biztos vagyok benne, hogy nem ezt akarod, hanem valami mást, csak még mindig nem tudod pontosan, hogy mit...
    Mutasd a teljes hozzászólást!
  • Hello Pookie2!

    Egy kis segítséget szeretnék kérni!

    minden táblára ugyan azt a where - t szeretném pl mezo1 = 1, nem csak a tömb utolsóra.

    $sql2 = "select * from ".implode(" UNION ALL select * from ", $tables)." where mezo1 = '1'";

    - hogy tudom ezt megoldani?

    Megköszönöm a segítséged!
    Mutasd a teljes hozzászólást!
  • Jól sejtettem, hogy nem többtáblás lekérdezés lesz a vége...
    Sokkal hamarabb választ kaptál volna, ha leírod, hogy pontosan a mi a célod... nem értem miért szívatod a népet (és magadat)...

    Az új kérdésedre, talán (nem próbáltam ki):
    $sql2 = "select * from ".implode(" where mezo1 = '1' UNION ALL select * from ", $tables)." where mezo1 = '1'";
    Lehetnél egy kicsit önállóbb!
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen!
    Mutasd a teljes hozzászólást!
  • De, folyamatosan bővülő több táblás! - azonos szerkezetű táblák, generált fix recordok, csak update -ek lesznek
    Mutasd a teljes hozzászólást!
  • Nem, amit végül csináltál, az N db. 1 táblás lekérdezés uniója (pontosabban "union all"-ja)!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd