2013-10-02 3 views
0

У меня возникли проблемы с выполнением 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: Правильный ответ, но я должен был добавить группировку, как это было возвращение более одного результата. Спасибо!

+0

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

ответ

1

Вы забыли добавить from table Заявления о

Попробуйте ::

SELECT 
t.episode, 
t.anime_id, 
MAX(t.type) as type, 
MIN(t.HD) as HD, 
MAX(t.thumbnail) as thumbnail, 
IF((type="raw"),(MIN(t.saved)), (SELECT MIN(saved) from anime_episodes WHERE type!="raw")) 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 
+0

Я считаю, что таблица anime_episodes, учитывая начало оператора IF, он также выбирает type = raw. хотя он не сглаживает t.type ... – Hituptony

+0

Спасибо! Однако, как оказалось, мне пришлось делать некоторые дополнения по другим причинам. –