У меня есть запрос MySQL, в который я хочу включить список идентификаторов из другой таблицы. На веб-сайте люди могут добавлять определенные элементы, а затем они могут добавлять эти элементы в избранное. Я в основном хочу получить список идентификаторов людей, которые одобрили этот элемент (это немного упрощено, но это то, к чему это сводится).
В основном я делаю что-то вроде этого:
SELECT *,
GROUP_CONCAT((SELECT userid FROM favourites WHERE itemid = items.id) SEPARATOR ',') AS idlist
FROM items
WHERE id = $someid
Таким образом, я смогу показать, кто предпочитает какой-то элемент, позже разделив idlist на массив в 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.