2013-04-14 4 views
0

То, что я пытаюсь достичь, это что-то вроде этого:WHERE с двумя суб условия

SELECT * 
FROM conv 
WHERE (WHERE from_user = 3 OR to_user = 3) 
AND (WHERE conv = 6_3 OR conv = 3_6) 

Так иногда conv поле в стиле [from_to] другое время он является [to_from] в зависимости от того, кто начал разговор. Я хочу перечислить сообщения, которые были отправлены мной или мной из разговора, который либо начинается мной, либо другим пользователем по отношению ко мне.

ответ

1

Просто удалите лишние WHERE S:

SELECT * 
FROM conv 
WHERE (from_user = 3 OR to_user = 3) 
AND (conv = "6_3" OR conv = "3_6") 

Я также обернут свои conv значения в " с, так как INT не может содержать _, поэтому он должен быть сохранен как VARCHAR (и, следовательно, требует " сек).

+1

Спасибо, я попробовал все в одной точке I почти получил его, но он сказал, что он не может найти столбец 6_3, добавив цитаты, которые я получил. Спасибо Дэнни. Я приму ваш ответ через минуту. – Ando

+0

Итак, у вас есть столбец «conv» в таблице с именем «conv»? И его содержимое избыточно - его можно вычислить из других столбцов, что нарушает 2NF – Bohemian

+0

Я должен согласиться с @Bohemian; Я просто разместил это как буквальное решение проблемы. –

2

Напишите WHERE ключевое слово раз.

SELECT * FROM conv WHERE (from_user = 3 OR to_user = 3) AND (conv = 6_3 OR conv = 3_6 
3

Это должно быть так же просто, как это:

SELECT * 
FROM conv 
WHERE (from_user = 3 OR to_user = 3) 

Если вы хотите "кунг-фу" версию, попробуйте следующее:

SELECT * 
FROM conv 
WHERE 3 IN (from_user, to_user) 
+0

hahaaahahahaha «kung fu version» человек, которого вы не можете себе представить, как устал я сейчас, и это заставило меня рассмешить мою задницу: D К сожалению, ни одна из версий не работает в моем случае. См. Ответ Дэнни. Приветственный помощник. – Ando

+0

Версия kung fu также означает, что база данных не может использовать индексы, которые находятся на 'from_user' или' to_user'. –

+0

@andy вы на 100% правильны. Я выразился там как любопытство, но особенно потому, что он использует только одну переменную один раз, что может быть единственным решением, если есть такое ограничение у вызывающего – Bohemian

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