MYSQL & PHP - возвращать 1 результат на переменную IN, даже если переменные не являются уникальными - PullRequest
0 голосов
/ 30 августа 2018

Я запрашиваю базу данных для возврата строки user_name на user_id со следующим подготовленным оператором в PHP:

$stmt = $conn->prepare("SELECT user_name FROM users WHERE user_id IN (?,?,?,?,?,?,?,?,?,?)");

Если каждая из переменных в операторе IN уникальна и находится в базе данных, я получаю 1 user_name результат для каждой переменной. Однако , если переменные в моем операторе IN не являются уникальными (2 из user_id * foo), я в настоящее время не получаю user_name результат для каждой IN переменной.

Как мне изменить подготовленный оператор так, чтобы даже если все мои переменные в моем операторе IN были одинаковыми, я все равно получал бы по 1 строке на переменную, при этом null возвращался, если переменная не найденный.

1 Ответ

0 голосов
/ 30 августа 2018

Используйте left join вместо:

SELECT u.user_name
FROM (SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id
     ) uu LEFT JOIN
     users u
     USING (user_id);

Предложение WHERE только отфильтровывает строки. Это не умножает их. Но объединение делает именно то, что вы хотите.

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