У меня есть запрос MySQL, в котором я хочу включить список идентификаторов из другой таблицы. На веб-сайте люди могут добавлять определенные элементы, и люди могут добавить эти предметы в свои избранные. Я в основном хочу получить список идентификаторов людей, которые воспользовались этим элементом (это немного упрощено, но это то, к чему это сводится).
В принципе, я делаю что-то вроде этого:
SELECT *,
GROUP_CONCAT((SELECT userid FROM favourites WHERE itemid = items.id) SEPARATOR ',') AS idlist
FROM items
WHERE id = $someid
Таким образом, я смог бы показать, кому понравился какой-то элемент, разделив список идентификаторов позже на массив в PHP далее в моем коде, однако я получаю следующую ошибку MySQL:
1242 - Подзапрос возвращает более 1 строки
Я думал, что это было как-то вроде использования GROUP_CONCAT
вместо, например, CONCAT
? Я иду об этом неправильно?
Хорошо, спасибо за ответы, которые, похоже, работают. Однако есть улов. Элементы также считаются фаворитами, если они были добавлены этим пользователем. Поэтому мне нужна дополнительная проверка, чтобы проверить, создан ли creator = userid. Может ли кто-нибудь помочь мне придумать умный (и, надеюсь, эффективный) способ сделать это?
Спасибо!
Изменить: я просто попытался сделать это:
SELECT [...] LEFT JOIN favourites ON (userid = itemid OR creator = userid)
И idlist пуст. Обратите внимание: если я использую INNER JOIN
вместо LEFT JOIN
, я получаю пустой результат. Хотя я уверен, что есть строки, соответствующие требованиям ON.