MySQL Ersatz für EXCEPT
hallo leute,
wieder einmal wende ich mich hilfesuchend an Euch:
ich habe zwei Mysql queries , deren Ergebnis sich ausschlissen soll:
$query1 = 'SELECT kw, path FROM kw WHERE lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY count DESC, kw ASC LIMIT 200';
$query2 = 'SELECT id, kw, path FROM kw WHERE lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY date_added DESC LIMIT 200';
Beide Abfragen suchen in der gleichen tabelle, die erste nach den 200 meisten 'counts' , die zweite nach den 200 neuesten Einträgen.
Als Ergebnis suche ich jene 200 der ersten Abfrage, die NICHT in der zweiten Abfrage gelistet sind.
MIt (query1) EXCEPT (query2) geht es unter Mysql nicht.
Auch folgendes klappt nicht, da Mysql in Subqueries kein LIMIT unterstützt.
$query = 'SELECT id, kw, path FROM kw
WHERE id NOT IN
(SELECT id FROM kw WHERE lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY date_added DESC LIMIT 200)
AND lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY count DESC, kw ASC LIMIT 200 ';
Hat da wer einen Tip für mich?
Lg, Chris
wieder einmal wende ich mich hilfesuchend an Euch:
ich habe zwei Mysql queries , deren Ergebnis sich ausschlissen soll:
$query1 = 'SELECT kw, path FROM kw WHERE lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY count DESC, kw ASC LIMIT 200';
$query2 = 'SELECT id, kw, path FROM kw WHERE lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY date_added DESC LIMIT 200';
Beide Abfragen suchen in der gleichen tabelle, die erste nach den 200 meisten 'counts' , die zweite nach den 200 neuesten Einträgen.
Als Ergebnis suche ich jene 200 der ersten Abfrage, die NICHT in der zweiten Abfrage gelistet sind.
MIt (query1) EXCEPT (query2) geht es unter Mysql nicht.
Auch folgendes klappt nicht, da Mysql in Subqueries kein LIMIT unterstützt.
$query = 'SELECT id, kw, path FROM kw
WHERE id NOT IN
(SELECT id FROM kw WHERE lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY date_added DESC LIMIT 200)
AND lang_id = '.intval($l['id']).' AND plain_kw REGEXP "^[0-9]" AND active = 1 AND use_as = 0 ORDER BY count DESC, kw ASC LIMIT 200 ';
Hat da wer einen Tip für mich?
Lg, Chris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 243174
Url: https://administrator.de/contentid/243174
Ausgedruckt am: 25.11.2024 um 04:11 Uhr
2 Kommentare
Neuester Kommentar
Hi,
probier mal das hier:
Grüße Uwe
probier mal das hier:
SELECT a.id, a.kw, a.path
FROM kw as a
LEFT JOIN (
SELECT id
FROM kw
WHERE lang_id = '.intval($l['id']).'
AND plain_kw REGEXP "^[0-9]"
AND active = 1
AND use_as = 0
ORDER BY date_added DESC LIMIT 200
) AS b USING (id)
WHERE lang_id = '.intval($l['id']).'
AND plain_kw REGEXP "^[0-9]"
AND active = 1
AND use_as = 0
AND b.id IS NULL
ORDER BY count DESC, kw ASC LIMIT 200 ';