У меня возникли проблемы с выполнением SUB SELECT в условии IF().MySQL IF() Sub Select
Я пытаюсь выбрать его, чтобы выбрать время сохранения MIN, если тип не равен определенному значению, исключая это значение из расчета.
Вот мой текущий запрос SQL, который работает за исключением IF():
SELECT
t.episode,
t.anime_id,
MAX(t.type) as type,
MIN(t.HD) as HD,
MAX(t.thumbnail) as thumbnail,
IF((MAX(t.type)!="raw"),(SELECT MIN(e.saved) FROM anime_episodes e WHERE e.type=MAX(t.type) AND t.episode=e.episode AND t.anime_id=e.anime_id GROUP BY e.anime_id, e.episode), (MIN(t.saved))) as time,
// UP HERE^
MAX(t.filler) as filler,
m.anime_name,
m.furl,
m.video_thumb
FROM anime_episodes t
LEFT JOIN anime_list m ON
(t.anime_id=m.anime_id)
WHERE t.approved=1 AND t.locked=0 AND m.status=0 AND t.episode>=m.latest_ep
GROUP BY t.anime_id, t.episode
ORDER BY time DESC LIMIT 0,24
Есть ли что-то происходит с моим синтаксисом? Он выглядит хорошо для меня, но ошибка:
SQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE type!="raw")) as time, MAX(t.filler) as filler,m.anime_name, m.furl, m.vid' at line 1
EDIT: Правильный ответ, но я должен был добавить группировку, как это было возвращение более одного результата. Спасибо!
Unrelated к вашей ошибке, но ваш ИНЕКЕ проверяет значение m.status равного 0. Как это может только true, если в anime_list есть строка, в которой LEFT OUTER JOIN не полезен. INNER JOIN даст вам точно такой же результат, но если вы хотите только сопоставлять записи состояния 0, продолжайте использовать LEFT OUTER JOIN, но больше проверьте, чтобы m.status в предложение ON JOIN (то же самое для AND t .episode> = m.latest_ep) – Kickstart