Задавайте вопросы, мы ответим
Вы не зашли.
Есть табличка со структурой, как здесь 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
В чём может быть ошибка?
Неактивен
Попробуйте заменить AND IF на AND NOT EXISTS(SELECT COUNT(*) FROM friends WHERE friends.userid = '$id' AND friends.friendid = fid)
вообще говоря это очень медленный запрос - так как подзапрос может выполняться для каждой строки таблицы. Вам проще отдельным запросом получить список тех записей, которые вы хотите исключить и уже подставить в запрос
AND userid NOT IN (....)
Неактивен
Спасибо! Что-то я не сообразил сразу.
Но всё-таки для справки, а почему может не работать такой запрос? NOT EXISTS(SELECT COUNT(*) FROM friends WHERE friends.userid = '$id' AND friends.friendid = fid) тоже не работает.
Неактивен
1. попробуйте отдельно этот запрос с известными Вам id
2. попробуйте дать другой алиас внутренней таблице friends
Неактивен