Lekérdezés feltétele egy tömb eredményei alapján
2022-01-05T22:52:26+01:00
2022-01-06T12:07:32+01:00
2022-08-12T06:35:28+02:00
steak
Sziasztok!

Egy lekérdezést szeretnék ahol a feltétel(ek) egy tömb eredményeinek felelnek meg.

SELECT * FROM `users` AS `u` INNER JOIN `text` AS `t` ON (`t`.`email` = `u`.`email`) WHERE `u`.`email` =
a végén a feltétel ez lenne:
$sor['email']
 
Köszönöm!
Mutasd a teljes hozzászólást!
Hali!

mintha egy ciklussal kellene ismételni a lekérdezést amíg van elem a tömbben…

Akár így is megoldható lenne, de nem ajánlom. Lekérdezést – nagyon speciális eseteket kivéve – nem hajtatunk végre ciklusban.

Összegezve a csepegtetett infókat: van egy korábbi lekérdezésed, amit lefuttatva kapsz egy eredmény-halmazt, aminek a soraiban van „email” oszlop. Ezeket az e-mail címeket szeretnéd felhasználni egy újabb lekérdezéshez. Akkor miért nem egyből úgy kérdezed le, kiegészítve azt az SQL-mondatot?

Mi az a korábbi lekérdezés, ami eredményezi az e-mail címeket (többek között)?

Mutasd a teljes hozzászólást!

  • Hali!

    Egy lekérdezést szeretnék ahol a feltétel(ek) egy tömb eredményeinek felelnek meg.

    Ha egy konkrét tömb-elem értéket értesz ezalatt, akkor igen, az előző témádban megadott SQL-mondat paraméterének értékül adhatod (nem ártana legközelebb a fejlesztőeszközt/programozási nyelvet is megadnod – a $ jelből feltételezem, hogy PHP).

    Ha a „tömb eredményeinek felelnek meg” alatt azt érted, hogy azon sorokat szeretnéd lekérdezni, amikben az e-mail címek egy tömbben lévő e-mail címekkel megegyeznek, az is megoldható, IN operátor használatával, például (csak példa, direkt konkrét értékekkel):
    SELECT * FROM `users` AS `u` INNER JOIN `text` AS `t` ON (`t`.`email` = `u`.`email`) WHERE `u`.`email` IN ('gipsz.jakab@sehol.hu', 'hát.izsák@bárhol.com', 'feles.elek@mindenhol.net')
    Persze, ezzel többet kell „melóznod”, hogy ha pl. paraméteres lekérdezéssel szeretnéd megoldani.

    Javaslat: nem árt forgatni sem a MySQL, sem a PHP (vagy bármilyen fejlesztőeszköz) doksiját.

    Mutasd a teljes hozzászólást!
  • igen ezt szeretném, csak a végén a konkrét értékek helyén , hogy tudom a tömb elemeit feldolgozni?
    Mutasd a teljes hozzászólást!
  • Hali!

    … hogy tudom a tömb elemeit feldolgozni?

    Nem feldolgoznod kell a tömb elemeit, hanem behelyettesítened. Persze, ehhez tényleg nem ártana tudni, hogy milyen eszközöket használsz. Pl. PHP/PDO használatával – viszonylag – könnyedén megoldható. A cél az, hogy egy olyan paraméteres SQL-mondatot alkoss meg, ami esetén könnyen „beillesztheted” (bind-olhatod) a paramétereket. Tehát, a cél, hogy legyen egy SQL-mondatod (az előző példám alapján), pl.:
    $sql = " SELECT * FROM `users` AS `u` INNER JOIN `text` AS `t` ON (`t`.`email` = `u`.`email`) WHERE `u`.`email` IN (:email0, :email1, :email2)";
    Ezután már csak a paraméter-tömböt kell úgy megalkotnod, hogy a tömb indexei (mivel asszociatív tömb lesz) a paraméterek nevével egyezzenek meg, azaz, a paraméter-tömb:
    $params = [ ':email0' => 'gipsz.jakab@sehol.hu', ':email1' => 'hát.izsák@bárhol.com', ':email2' => 'feles.elek@mindenhol.net', ];
    Így, ezek megalkotása után kb. ennyi lenne a tényleges lekérdezés:
    try { $db = new \PDO('mysql:dbname=mydb;host=127.0.0.1', 'user', 'password'); $stmt = $db->prepare($sql); $stmt->execute($params); $result = $stmt->fetchAll(\PDO::FETCH_ASSOC); } catch (\PDOException $e) { echo vsprintf('ERROR: [%1$s] %3$s (%2$s)', $e->errorInfo); }
    Azt, hogy az e-mail címekből álló tömb alapján hogyan készíted el az $sql SQL-mondatot, illetőleg a $params paraméter-tömböt, meghagyom neked.

    Mutasd a teljes hozzászólást!
  • szerintem azért nem értem , mert az én tömböm adatbázis lekérdezésből jön :/
    ugyhogy nem tudom paraméterezni :(
    Mutasd a teljes hozzászólást!
  • mintha egy ciklussal kellene ismételni a lekérdezést amíg van elem a tömbben, és a lekérdezések  eredményeit bepakolni vhogy egy resultba
    Mutasd a teljes hozzászólást!
  • Hali!

    mintha egy ciklussal kellene ismételni a lekérdezést amíg van elem a tömbben…

    Akár így is megoldható lenne, de nem ajánlom. Lekérdezést – nagyon speciális eseteket kivéve – nem hajtatunk végre ciklusban.

    Összegezve a csepegtetett infókat: van egy korábbi lekérdezésed, amit lefuttatva kapsz egy eredmény-halmazt, aminek a soraiban van „email” oszlop. Ezeket az e-mail címeket szeretnéd felhasználni egy újabb lekérdezéshez. Akkor miért nem egyből úgy kérdezed le, kiegészítve azt az SQL-mondatot?

    Mi az a korábbi lekérdezés, ami eredményezi az e-mail címeket (többek között)?

    Mutasd a teljes hozzászólást!
  • Túlkombináltam :)

    Köszönöm!
    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