SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.10.2007 17:25:48

Babutta
Участник
Откуда: Балашиха
Зарегистрирован: 21.09.2007
Сообщений: 19

Что неправильно в запросе?

Есть табличка со структурой, как здесь http://www.livejournal.com/doc/server/l … iends.html но без последнего столбца (впрочем это не принципиально).

Есть некий id ($id) - надо вытащить из этой таблицы записи, где этот id присутствует в стобце friendid, соответственно в этих строках будут какие-то значения в стобце userid (назовём их fid)
Но при этом запись будет вытаскиваться только в том случае, если в этой таблице нет строк в которых userid = $id, а friendid = fid (т.е. если нет строк в которых значения friendid и userid  поменяны местами.

Ещё есть табличка users, в которой хранятся данные о пользователях - их через id вытаскиваем.

Запрос выглядит так:
SELECT friends.userid AS fid,users.nick,users.login,'000','FFF','not_friend'
FROM friends,users
WHERE friends.friendid = '$id' AND friends.userid = users.id AND IF((SELECT COUNT(*) FROM friends WHERE friends.userid = '$id' AND friends.friendid = fid),0,1)
ORDER BY users.login ASC

Но это не работает - вытаскивает всех подряд, т.е. IF((SELECT COUNT(*) FROM friends WHERE friends.userid = '$id' AND friends.friendid = fid),0,1) почему-то всегда даёт 1

В чём может быть ошибка?

Неактивен

 

#2 19.10.2007 17:35:42

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Что неправильно в запросе?

Попробуйте заменить AND IF на AND NOT EXISTS(SELECT COUNT(*) FROM friends WHERE friends.userid = '$id' AND friends.friendid = fid)

вообще говоря это очень медленный запрос - так как подзапрос может выполняться для каждой строки таблицы. Вам проще отдельным запросом получить список тех записей, которые вы хотите исключить и уже подставить в запрос
AND userid NOT IN (....)

Неактивен

 

#3 19.10.2007 17:46:05

Babutta
Участник
Откуда: Балашиха
Зарегистрирован: 21.09.2007
Сообщений: 19

Re: Что неправильно в запросе?

Спасибо! Что-то я не сообразил сразу. smile

Но всё-таки для справки, а почему может не работать такой запрос? NOT EXISTS(SELECT COUNT(*) FROM friends WHERE friends.userid = '$id' AND friends.friendid = fid) тоже не работает.

Неактивен

 

#4 19.10.2007 17:49:58

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Что неправильно в запросе?

1. попробуйте отдельно этот запрос с известными Вам id
2. попробуйте дать другой алиас внутренней таблице friends

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson