2016-07-11 7 views
2
id parent_id child_id 
1 1    1 
2 2    2 
3 2    2 
4 1    1

Ich habe eine Tabelle, aus der ich brauche die gemeinsamen Werte von Daten zu bekommen, wenn ich es mit der ID abfragen ... für zB wenn id = 2 und id = 3 dannerhalten alle Zeilen gemeinsam Eltern mit

Rückkehr
 
id parent_id 
2 2 
3 2 

ich habe schon versucht, diese nach viel durch verschiedene Beispiele der Jagd:

SELECT ta.user_id,ta.interest_parent_id,ta.interest_child_id 
     FROM user_interest ta 
     WHERE ta.user_id=2 AND 
     (SELECT COUNT(*) FROM user_interest tb 
      WHERE ta.interest_parent_id=tb.interest_parent_id 
      AND tb.user_id=3)>1 

aber es antwortet mit nur:

 
id parent_id 
2 2 

jede Hilfe :(im eine MySQL-Datenbank mit PHP/codeigniter kann

+0

Sie bitte Ihre Frage auszuarbeiten. Wie es mit Ihrem Dataset aussieht, möchten Sie eine Zeile mit einer bestimmten ID so lange auswählen, wie die Zeile mit dieser bestimmten übergeordneten ID. Habe ich es richtig verstanden? –

+1

** Ich habe eine Tabelle, aus der ich die gemeinsamen Werte von Daten bekommen muss, wenn ich es mit ID abfrage. ** Erklären Sie diese – 1000111

+0

Idealerweise möchte ich zwei IDs übergeben und zwei Zeilen überprüfen und die Spalten mit gleichen Werten – darkCoffy

Antwort

1

Sie geben kann einen Versuch:

SELECT 
tOne.id, 
tOne.parent_id 
FROM 
(
    SELECT 
    * 
    FROM user_interest A 
    WHERE A.id IN (2,3) 
) tOne 
INNER JOIN 

(
    SELECT 
    * 
    FROM user_interest A 
    WHERE A.id IN (2,3) 

) tTwo 
ON tOne.parent_id = tTwo.parent_id 
AND tOne.id <> tTwo.id 
ORDER BY tOne.parent_id; 

SQL FIDDLE DEMO

Jeder Vorschlag in Richtung optimizati Eine Abfrage ist willkommen.

EDIT: SQL FIDDLE

+0

http://sqlfiddle.com/#!9/8df87/1/0 in diesem Fall gibt es mir eine doppelte Zeile für die ID 2 .. ist es, weil wir eine Union verwenden? – darkCoffy

+0

Schauen Sie sich die letzten zwei INSERT-Anweisungen an. 'INSERT INTO' user_interest' VALUES ('3', '2', '2'); INSERT IN "user_interest" VALUES ('3', '2', '1'); 'Same parent_id zweimal für id = 3 – 1000111

+0

Überprüfen Sie diese [** FIDDLE **] (http://sqlfiddle.com/#! 9/8df87/4/0). @ fred4993 – 1000111

0

Sie das Scripting ein Unter SELECT zu tun, machen mit:

SELECT * FROM table WHERE Name IN (SELECT Name FROM table GROUP BY Name HAVING count(*) > 1)