Имеются таблицы:
Всё это реализует связь many-to-many и запрашивается как:
SELECT
m.id as Id,
GROUP_CONCAT(distinct t.id) AS DepList
FROM
mods m
JOIN
relations mrm ON m.id = mrm.mod_owner
JOIN
mods t ON mrm.mod_attached = t.id or mrm.mod_owner = t.id
WHERE
m.name = "%s"
AND
m.modification = (SELECT max(modification) FROM mods)
GROUP BY m.id
Результат:
+----+---------+
|Id: | DepList:|
+----+---------+
|4 | 2, 4 |
+----+---------+
Но в случае, если в таблице relations нет ни одной записи, связанной с %s, возвращается пустой результат, а необходимо, чтобы возвращалось
+----+---------+
|Id: | DepList:|
+----+---------+
|%id | |
+----+---------+
Всем больное спасибо, поставил плюсы. Ошибка была в том, что я забыл указать в SELECT max(modification) WHERE name = %s, как всегда глупость..
SELECT
m.id as Id,
GROUP_CONCAT(distinct t.id) AS DepList
FROM
mods m
LEFT OUTER JOIN
relations mrm ON m.id = mrm.mod_owner
LEFT OUTER JOIN
mods t ON mrm.mod_attached = t.id or mrm.mod_owner = t.id
WHERE
m.name = "%s"
AND
m.modification = (SELECT max(modification) FROM mods)
GROUP BY m.id
Поскольку второй JOIN делается через первый - оба должны быть LEFT OUTER JOIN
Сборка персонального компьютера от Artline: умный выбор для современных пользователей