nk
Goto Top

MySQL Schnittmenge Abfrage Problem

Hallo,
komme bei einer evtl. simplen Abfrage nicht weiter.

Folgende Tabelle:

uid_local | uid_foreign
1 | 3
2 | 3
1 | 6
3 | 6


Nun möchte ich alle Reihen mit der uid_local 1 und 2 ausgeben lassen. Aber nur die mit gleicher uid_foreign.
Eine Abfrage nach den Reihen mit der uid_local 1, 2 und 3 sollte also keine Reihe ausgeben.

Ist das mit einer Abfrage zu schaffen oder muss ich mir da was anderes einfallen lassen?

Danke & Viele Grüße,
Nils

Content-ID: 151643

Url: https://administrator.de/forum/mysql-schnittmenge-abfrage-problem-151643.html

Ausgedruckt am: 27.12.2024 um 16:12 Uhr

awagner82
awagner82 23.09.2010 um 16:46:14 Uhr
Goto Top
Hi,

Was heißt mit "nur mit gleicher" uid_foreign?
Ist das ein fester Wert?
Willst du die Ergebnismenge untereinander vergleichen und anschließend nach dem Feld gruppieren?

Gruß
nk
nk 23.09.2010 um 17:02:03 Uhr
Goto Top
Hallo,
ich versuch mal zu erklären, worum es geht:
Es geht darum Inhalte über Keywords zu filtern.
Man soll bestimmte Keywords (uid_local) auswählen können und dann nur die Inhaltseinträge (uid_foreign) angezeigt bekommen, die mit den Keywords verknüpft wurden.
uid_foreign ist also kein fester Wert.

Gruß
it-frosch
it-frosch 23.09.2010 um 18:23:10 Uhr
Goto Top
Hallo Nils,

Nun möchte ich alle Reihen mit der uid_local 1 und 2 ausgeben lassen. Aber nur die mit gleicher uid_foreign.

und

Man soll bestimmte Keywords (uid_local) auswählen können und dann nur die Inhaltseinträge (uid_foreign) angezeigt bekommen, die mit den Keywords verknüpft wurden.

sind verschiedene Abfragen.

Was willst du denn nun? face-wink

Man soll bestimmte Keywords (uid_local) auswählen können und dann nur die Inhaltseinträge (uid_foreign) angezeigt bekommen, die mit den Keywords verknüpft wurden.

Das wäre diese Abfrage.

select uid_local,uid_foreign from tabelle where uid_local in ('Keyword1', ... ,'KeywordN')
order by uid_local


Nun möchte ich alle Reihen mit der uid_local 1 und 2 ausgeben lassen. Aber nur die mit gleicher uid_foreign.

wäre

select a.uid_local,a.uid_foreign from tabelle a
where a.uid_local in ('1','2')
and a.uid_foreign in (select b.uid_foreign from tabelle b where b.uid_local in ('1','2') )

Bei der zweiten Abfrage bin ich mir nicht ganz sicher. Vielleicht meldet sich ja Biber dazu mal.

grüße vom it-frosch
nxclass
nxclass 23.09.2010 um 20:42:41 Uhr
Goto Top
SELECT
    `uid_foreign`,
    GROUP_CONCAT(DISTINCT `uid_local` ORDER BY `uid_local` ASC SEPARATOR ', ') AS 'uid_local_list'      
FROM `tab_100923`
GROUP BY `uid_foreign`;
erst mal eine Liste erzeugen mit allen uid_foreign und den dazugehörigen uid_local - in aufsteigender Folge.

nun könnte man darin nach der richtigen Kombination suchen.
SELECT temp.`uid_foreign`
FROM (
    SELECT `uid_foreign`, GROUP_CONCAT( DISTINCT `uid_local` ORDER BY `uid_local` ASC SEPARATOR ', ' ) AS 'uid_local_list'  
    FROM `tab_100923`
    GROUP BY `uid_foreign`
) AS `temp`
WHERE temp.`uid_local_list` LIKE '1, 2';  
nk
nk 30.09.2010 um 17:04:59 Uhr
Goto Top
Danke!
Damit habe ich es nun hinbekommen.
Viele Grüße,
Nils