Hallo,
ich habe folgende schon recht komplexe MySQL Abfrage:
PHP-Code:
SELECT
p.apid, m.kid,
GROUP_CONCAT(ptag.tid) AS ptids,
GROUP_CONCAT(DISTINCT(mtag.tid)) AS mtids
FROM
(person AS p LEFT JOIN taglink AS ptag ON (ptag.otab='person' AND ptag.oid = p.apid))
JOIN pmlink AS link ON(p.apid = link.apid)
JOIN
(master AS m LEFT JOIN taglink AS mtag ON(mtag.otab='master' AND mtag.oid = m.kid))
ON(link.kid=m.kid)
GROUP BY
p.apid, m.kid
HAVING (ptids != 1 OR ptids IS NULL)
AND (ptids != 2 OR ptids IS NULL)
AND (mtids != 2 OR mtids IS NULL)
Der HAVING-Teil wird durch User-Eingaben generiert und kann sich ändern. Ich möchte jetzt einfach alle Selektierten apids und kids in einer neuen Tabelle Speichern. Natürlich könnte ich jetzt alle Daten über PHP auslesen und neu speichern - aber MySQL hat ja eigentl. eine INSERT ... SELECT Funktion die hier passend und vorallen deutlich schneller wäre:
PHP-Code:
INSERT INTO sellink (selid, apid, kid)
SELECT
1 AS selid,
p.apid, m.kid,
GROUP_CONCAT(ptag.tid) AS ptids,
GROUP_CONCAT(DISTINCT(mtag.tid)) AS mtids
FROM
(person AS p LEFT JOIN taglink AS ptag ON (ptag.otab='person' AND ptag.oid = p.apid))
JOIN pmlink AS link ON(p.apid = link.apid)
JOIN
(master AS m LEFT JOIN taglink AS mtag ON(mtag.otab='master' AND mtag.oid = m.kid))
ON(link.kid=m.kid)
GROUP BY
p.apid, m.kid
HAVING (ptids != 1 OR ptids IS NULL)
AND (ptids != 2 OR ptids IS NULL)
AND (mtids != 2 OR mtids IS NULL)
Dieses Query schlägt fehl - weil die Anzahl der Spalten aus dem INSERT nicht mit den Spalten aus dem SELECT übereinstimmen. Jemand eine Idee wie ich das lösen kann ohne die zwei extra Spalten in meiner Zieltabelle anzulegen?