список всех друзей - PullRequest
       20

список всех друзей

0 голосов
/ 23 августа 2009

У меня есть столбцы F.FRIENDID, F.MEMBERID в таблице FRIENDS и столбцы M.MEMBERID, M.FIRSTNAME, M.LASTNAME в таблице MEMBERS. Я хочу перечислить всех друзей зарегистрированного пользователя. Проблема здесь в том, что подписанный идентификатор участника может иногда находиться в строке FRIENDID или строке MEMBERID в таблице FRIENDS. Это связано с тем, что когда участник добавляет другого участника, его или ее идентификатор записывается в поле FRIENDID, где идентификатор другого участника записывается в поле MEMBERID.

Я пробовал пару запросов SQL. Ни один не работал. Я думаю, что этот запрос должен был работать, но он дает следующую ошибку.

SQL = "SELECT F.FRIENDID, F.MEMBERID, F.ACTIVE, M.MEMBERID, M.FIRSTNAME, M.LASTNAME, M.ACTIVE"
SQL = SQL & " FROM FRIENDS F, MEMBERS M"
SQL = SQL & " WHERE (F.FRIENDID OR F.MEMBERID) = "& Session("MEMBERID") &" AND (F.FRIENDID OR F.MEMBERID) = M.MEMBERID AND F.ACTIVE = 1 AND M.ACTIVE = 1"
SQL = SQL & " ORDER BY M.FIRSTNAME, M.LASTNAME ASC"
Set objFriends = objConn.Execute(SQL)   

Поставщик Microsoft OLE DB для драйверов ODBC, ошибка '80040e14'

[Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Неверный синтаксис рядом с ключевым словом «ИЛИ».

Ответы [ 4 ]

1 голос
/ 23 августа 2009

Вам необходимо использовать синтаксис IN:

WHERE M.MEMBERID IN (F.FRIENDID, F.MEMBERID)
  AND "& Session("MEMBERID") &" IN (F.FRIENDID, F.MEMBERID)

Вот как я бы переписал ваш запрос с помощью соединений ANSI:

SELECT f.friendid,
       f.memberid,
       f.active,
       COALESCE(mf.memberid, mm.memberid) 'memberid',
       COALESCE(mf.firstname, mm.firstname) 'firstname',
       COALESCE(mf.lastname, mm.lastname) 'lastname',
       COALESCE(mf.active, mm.active) 'active'
  FROM FRIENDS f
  JOIN MEMBERS mf ON mf.memberid = f.friendid AND mf.active = 1
  JOIN MEMBERS mm ON mm.memberid = f.memberid AND mm.active = 1
 WHERE f.active = 1
   AND "& Session("MEMBERID") &" IN (f.friendid, f.memberid)
 ORDER BY firstname, lastname
1 голос
/ 23 августа 2009

Вы не можете сделать: AND (F.FRIENDID OR F.MEMBERID) = M.MEMBERID в SQL.

Измените его на:

AND (F.FRIENDID = M.MEMBERID OR F.MEMBERID = M.MEMBERID)
0 голосов
/ 23 августа 2009

Вам нужно взглянуть на синтаксис выражения SQL ИЛИ можно использовать только между выражениями

например X = Z или Y = Z не (X или Y) = Z

Итак, переделайте свой SQL таким образом, и он должен работать .. Я считаю, что это помогает сделать SQL в командной строке, прежде чем встраивание в сообщения об ошибках VB может быть яснее

0 голосов
/ 23 августа 2009

Вы пробовали это?

SQL = SQL & " WHERE (F.FRIENDID = " & Session("MEMBERID") &
            " OR F.MEMBERID = "& Session("MEMBERID") &
            ") AND (F.FRIENDID = M.MEMBERID OR F.MEMBERID = M.MEMBERID) "&
            "AND F.ACTIVE = 1 AND M.ACTIVE = 1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...