2014-09-18 5 views
0

J'ai 3 tables dans la base de données MySQLmysql join ne fonctionne pas correctement

chat 
user1, user2, chat_key 

chat_seen 
msgid, userid, viewed 

users 
username, status, key 

Alors im essayant d'afficher les chats les commander en repérant les utilisateurs en ligne, puis les messages vus. Mais ça ne marche pas. ce que j'ai jusqu'à présent, iv que cela a à travailler avec le chat et les utilisateurs, je ne sais pas comment ajouter ordre par chat vu

("SELECT u.random, u.status, c.chat_key, c.seen, u.username 
            FROM chat c, users u 
            WHERE CASE 
            WHEN c.user1 = ? 
            THEN c.user2 = u.random 
            WHEN c.user2 = ? 
            THEN c.user1= u.random 
            END 
            AND (
            c.user1 = ? 
            OR c.user2 = ?) 
            ORDER BY u.status DESC LIMIT 50"); 

Ainsi, les résultats devraient être

username - online - (2 messages) 
username - online - (1 message) 

username - offline - (20 messages) 
username - offline - (2 messages) 
username - offline - (o messages) 

Au moment j'ai

username - online - (0 messages) 
username - online - (0 messages) 
username - offline - (2messages) 
username - offline - 20 messages) 
+1

pouvez-vous créer un fiddle SQL (http://sqlfiddle.com/), afin que nous puissions voir les données –

+0

Écrivez la syntaxe standard 'JOIN' au lieu de la syntaxe obsolète qui a disparu depuis plus de 20 ans. –

Répondre

0

Essayez cette requête ci-dessous:

("SELECT 
u.random, 
u.status, 
c.chat_key, 
c.seen, 
u.username 

FROM chat c, users u 

WHERE 
(c.user1 = ? AND c.user2 = u.random) 
OR 
(c.user2 = ? AND c.user1 = u.random) 
AND 
(c.user1 = ? OR c.user2 = ?) 

ORDER BY u.status DESC LIMIT 50"); 

Faites-moi savoir si cela fonctionne. : D

+0

hey, ouais mais j'essaie de le commander par chat_seen vu –

+0

Dans ce cas, vous pouvez simplement changer la dernière ligne à: COMMANDER PAR c.status, c.seen DESC LIMIT 50 ") – smzsmzsmz

+0

iv essayé mais il montre blanc J'en ai besoin pour dire select * from chat vu où r.msgid = c.chat_key et r.userid =? ORDER BY u.status, r.viewed –