2017-07-20 2 views
0

In Mariadb-Datenbank möchte ich eine Abfrage machen, um zwei Tabellen zu verbinden: joke und jokevote, um alle Witze zu erhalten, die von einem bestimmten Benutzer aufgewertet werden.Wie mache ich einen Join zwischen 2 Tabellen mit 2 Werten?

Hier sind die Tabellen:

Witz

+-------------+------------------+------+-----+-------------------+----------------+ 
| Field  | Type    | Null | Key | Default   | Extra   | 
+-------------+------------------+------+-----+-------------------+----------------+ 
| id   | int(6) unsigned | NO | PRI | NULL    | auto_increment | 
| title  | varchar(255)  | NO |  | None    |    | 
| content  | mediumtext  | NO |  | NULL    |    | 
| user_id  | int(10) unsigned | YES |  | 0     |    | 
| username | varchar(32)  | NO |  | Unknown   |    | 
... 

jokevote:

+---------+------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+---------+------------+------+-----+---------+----------------+ 
| id  | int(11) | NO | PRI | NULL | auto_increment | 
| joke_id | int(11) | NO |  | NULL |    | 
| user_id | int(11) | NO |  | NULL |    | 
| vote | tinyint(4) | NO |  | NULL |    | 
+---------+------------+------+-----+---------+----------------+ 

Der Inhalt jokevote ist: enter image description here

Einige Werte in joke Tabelle (in Bezug auf Benutzer 6): enter image description here

Einer der Abfrage, die ich versucht ist:

SELECT * FROM joke LEFT JOIN jokevote 
    ON joke.user_id=6 AND joke.id=jokevote.joke_id 
    AND jokevote.vote=1; 

Die Abfrage nur 2 Witze zurückgeben sollte, aber es gibt alle die Witze. Ich habe auch versucht, andere Abfragen wie folgt:

SELECT * FROM joke LEFT JOIN jokevote 
ON joke.user_id=6 AND joke.id=jokevote.joke_id AND 
jokevote.vote=1 AND joke.user_id=jokevote.user_id AND ; 

(wieder, die alle die Witze zurückgibt)

Also ich bin ahnungslos links und fragen, was in diesem Fall die richtige Abfrage ist?

+0

zeigen auch eine Datenprobe und der expcted Ergebnis – scaisEdge

+2

LEFT JOIN gibt alle Datensätze aus der linken Seite der Abfrage. So wird es in deinem Fall immer alle Witzdaten zurückgeben. Vielleicht suchen Sie nach INNER JOIN? –

+0

Verwenden Sie "Join" anstelle von "Linke Verbindung" –

Antwort

3

Ich glaube, Sie sagen, ein INNER JOIN stattdessen tun sollten

SELECT * FROM joke INNER JOIN jokevote 
ON joke.id=jokevote.joke_id 
WHERE jokevote.vote=1 
AND joke.user_id=6; 
+0

Dies gibt 0 Zeilen zurück, während es 2 Witze zurückgeben sollte. – Karlom

+0

@Karlom, Beispieldaten für 'joke' Tabelle sowie – Rahul

+0

hinzufügen Beispieldaten für beide Tabellen hinzugefügt. Bitte guck dir das an. – Karlom