Több sql tábla tartalmának egyesítése egy üres táblába
2021-11-10T11:46:17+01:00
2021-11-10T20:56:22+01:00
2022-08-12T05:40:28+02:00
Prog Tan
Sziasztok!

PHP használatával több tábla tartalmát szeretném összevonni, egyesíteni egy meglévő, üres táblába.

Hogyan tudom ezt a legegyszerűbben megoldani?

16 darab tábláról van szó, amelyeknek a szerkezete megegyeznek.

Előre is köszönöm szépen!
Mutasd a teljes hozzászólást!
Én nem vonnám be a php-t, SQL-lel simán megoldható.

Valami ilyesmi lehetne (MySQL/MariaDB syntax):

INSERT INTO `uj_tabla` (`mezo_1`,`mezo_2`,...,`mezo_N`) SELECT `mezo_1`,`mezo_2`,...,`mezo_N` FROM `regi_tabla_1` UNION ALL SELECT `mezo_1`,`mezo_2`,...,`mezo_N` FROM `regi_tabla_2` UNION ALL ... SELECT `mezo_1`,`mezo_2`,...,`mezo_N` FROM `regi_tabla_16`
Mutasd a teljes hozzászólást!

  • Köszönöm szépen!

    Én nem vonnám be a php-t, SQL-lel simán megoldható.

    Csupán azért mert php-val "szoktam" SQL utasításokat végezni.

    --------------------

    Így próbálkoztam:
    ( Az összevonandó táblák: `tabla1`, tabla2`, ..., `tabla16` )
    Előbb egy ciklussal "legyártom", hogy hányszor is szeretném (ahány tábla van: 1-től 16-ig), és utána rakom be a lekérdezésbe.

    $tablak = ''; for ($i=1; $i<16; $i++) $tablak .= "SELECT * FROM `tabla$i` UNION ALL SELECT * FROM `tabla".(++$i)."`"; $q = mysqli_query($kapcsolat,"INSERT INTO `uj_tabla` (`mezo_1`,`mezo_2`,`mezo_3`) $tablak"); if ($q) echo 'Oke!'; else echo mysqli_error($kapcsolat);
    Viszont sajnos ezt a hibát adja vissza:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM `tabla3` UNION ALL SELECT * FROM `tabla' at line 4

    Hol rontom el?
    Mutasd a teljes hozzászólást!
  • Csupán azért mert php-val "szoktam" SQL utasításokat végezni.

    Ahogy érzed.

    Viszont sajnos ezt a hibát adja vissza: ...

    Ha beírod ide a teljes generált sql-t (pl. echo-zd ki), akkor ránézek.

    A SELECT * ... viszont problémás lehet a PK mező(k) miatt, szerintem inkább sorold fel az összes érintett oszlopot!
    Mutasd a teljes hozzászólást!
  • Hali!

    Hol rontom el?

    Ott, hogy nem megfelelően állítod elő az SQL-mondatot: minek a ciklusban két „SELECT *…” kitételt hozzáadni az SQL-mondathoz?

    Egyébként, ennél egyszerűbben is megoldhatod:
    $sql = "INSERT INTO `uj_tabla` (`mezo_1`, `mezo_2`, `mezo_3`)"; $sql .= "\nSELECT * FROM `tabla".implode("`\nUNION ALL\nSELECT * FROM `tabla", range(1, 16))."`";
    És hallgass pookie2-re! Mind azzal kapcsolatban, hogy fölösleges PHP-vel megoldani, mikor egyetlen SQL-mondattal megteheted, valamint figyelj az elsődleges és egyedi kulcsokra (ha vannak).

    Mutasd a teljes hozzászólást!
  • Hali!

    Köszönöm szépen mindkettőtöknek!
    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