Используя GROUP_CONCAT на подзапросе в MySQL

Ошибка анализа: синтаксическая ошибка, неожиданная '['

Эта ошибка возникает в двух вариантах:

Вариант 1

$arr = [1, 2, 3];

Синтаксис инициализатора этого массива был введен только в PHP 5.4; это приведет к возникновению ошибки парсера в версиях до этого. Если возможно, обновите свою установку или используйте старый синтаксис:

$arr = array(1, 2, 3);

См. Также этот пример из руководства.

Вариант 2

$suffix = explode(',', 'foo,bar')[1];

Результаты функции разыменования массива также были введены в PHP 5.4. Если обновление невозможно, вам нужно использовать временную переменную:

$parts = explode(',', 'foo,bar');
$suffix = $parts[1];

См. Также этот пример из руководства.

41
задан PhearOfRayne 21 December 2012 в 07:27
поделиться

3 ответа

Вы не можете переменные доступа во внешнем объеме в таких запросах (не может использовать items.id там). Необходимо скорее попробовать что-то как

SELECT
    items.name,
    items.color,
    CONCAT(favourites.userid) as idlist
FROM
    items
INNER JOIN favourites ON items.id = favourites.itemid
WHERE
    items.id = $someid
GROUP BY
    items.name,
    items.color;

, Разворачивают список полей по мере необходимости (имя, окрасьте...).

14
ответ дан nietonfir 27 November 2019 в 00:17
поделиться

Я думаю, что у Вас может быть "идентификатор пользователя = itemid" неправильно, не был должен он быть похожим на это:

SELECT ITEMS.id,GROUP_CONCAT(FAVOURITES.UserId) AS IdList
FROM FAVOURITES 
INNER JOIN ITEMS ON (ITEMS.Id = FAVOURITES.ItemId OR FAVOURITES.UserId = ITEMS.Creator)
WHERE ITEMS.Id = $someid
GROUP BY ITEMS.ID
2
ответ дан Turnkey 27 November 2019 в 00:17
поделиться

Цель GROUP_CONCAT корректна, но подзапрос является ненужным и вызывает проблему. Попробуйте это вместо этого:

SELECT ITEMS.id,GROUP_CONCAT(FAVOURITES.UserId)
FROM FAVOURITES INNER JOIN ITEMS ON ITEMS.Id = FAVOURITES.ItemId
WHERE ITEMS.Id = $someid
GROUP BY ITEMS.ID
1
ответ дан Turnkey 27 November 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: