Присоединиться не равно? - PullRequest
0 голосов
/ 05 марта 2019

У меня возникла проблема.

То, что делает следующий код, захватывает детали из первой таблицы, только если критерии из второй совпадают (и исключает текущего члена [player_id] изquery [WHERE]).

Что мне нужно сделать, это получить данные из первой таблицы, исключая пользователей из второй таблицы.

Так что, если игрок уже сопоставил сПользователь исключает это из результатов; это должен быть список ранее не встречавшихся пользователей .

Совпадения существуют только после события, поэтому необходимо проверить, было ли совпадение или нет.

Я думал, что использования <> в JOIN будет достаточно, но это не работает, и старые потоки говорят, что используют OUTER, но это тоже не работает.LEFT JOIN не исключает, а RIGHT JOIN возвращает то же самое, что и JOIN.

SELECT
    a.user_id,
    b.*
FROM
    tblUsers a
        JOIN tblMatches b
            ON (b.player_1 = ". $player_id ." AND b.player_2 = a.user_id)
            OR (b.player_2 = ". $player_id ." AND b.player_1 = a.user_id)
WHERE
    a.user_id <> ". $player_id ."
GROUP BY
    a.user_id

Обновление примеров данных:

  • tblUsers, буквально список идентификаторов пользователей (1, 2, 3, 4 и т. Д.).
  • tblMatches, один идентификатор пользователя и другой идентификатор пользователя (1 и 3, 2 и 3, 4 и 1 и т. Д.)

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Если вам просто нужны пользователи, которые не играли против игрока из переменной?
Тогда с этим может помочь NOT EXISTS.

Примерно так:

SELECT user_id
FROM tblUsers u
WHERE NOT EXISTS
(
    SELECT 1
    FROM tblMatches m
    WHERE @player_id IN (m.player_1, m.player_2)
      AND u.user_id IN (m.player_1, m.player_2)
)
0 голосов
/ 05 марта 2019

Хорошо, да ... то, что сказал Майкл Берковски, СЛЕДУЕТ ПРИСОЕДИНЯТЬСЯ И НУЛЯЕТ.

Это мой обновленный код:

SELECT
    a.user_id,
    b.*
FROM
    $wpdb->usermeta a
        LEFT JOIN wp_matches b
            ON (b.player_1 = ". $player_id ." AND b.player_2 = a.user_id)
            OR (b.player_2 = ". $player_id ." AND b.player_1 = a.user_id)
WHERE
    b.player_1 IS NULL AND b.player_2 IS NULL
GROUP BY
    a.user_id

Несколько твиков, необходимых для включения других условий,но я исключаю всех подходящих пользователей сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...