2015-12-27 4 views
-4

У меня есть такой стол. Имяскажите мне sql

Таблица: сообщение

mid | mfrom | mto | msg 
------------------------ 
1 | a | b | hi 
2 | b | a | hello 
3 | a | c | how are you 
4 | c | a | fine 

я могу показать все строки по

`$sql = mysql_query("SELECT * 
FROM message 
WHERE mto = '$to' 
OR mfrom = '$to';"); 
while($row = mysql_fetch_array($sql)) 
{ 
echo $row['msg']; 
}` 

, но я хочу, чтобы показать только один результат, если mfrom и mto или mto и mfrom равно , Например, если mfrom =a и mto=b или mfrom=b и mto=a. Я хочу показать только один результат таких как

mid | mfrom | mto | msg 
------------------------- 
2 | b | a | hello 
4 | c | a | fine 

, пожалуйста, сообщите мне запрос.

+1

Вы должны будете объяснить немного больше, что вы хотите –

+0

'SELECT * FROM message WHERE mto = 'a';' Не уверен, какой результат вы пытаетесь получить, – Matt

+0

Я думаю, вы хотите, чтобы сообщения, отправленные пользователю, т.е. 'where mto = 'a'' –

ответ

0

Ваш вопрос непонятен, потому что ваш «запрос» кажется неправильным («mfrom и mto или mto и mfrom равно» не кажется правильным).

Тем не менее, поскольку вы назвали «сообщение» таблицы, я предполагаю, что вы хотите каждое сообщение один раз, даже если оно появляется дважды в таблице.

Что вы можете сделать, это запрос из таблицы «дважды», а затем использовать больше из идентификаторов:

SELECT first.* FROM message AS first LEFT JOIN message AS second 
    ON first.mfrom = second.mto AND first.mto = second.mfrom 
    WHERE first.mid > second.mid OR second.mid is NULL; 

Это даст вам результат, который вы просили. Он также предоставит вам любое сообщение, в котором нет строки «партнера».

Если вы хотите получать только соответствующие сообщения, вы можете удалить «OR second.mid NULL».

Смежные вопросы