Хорошо, у меня есть запрос, который выглядит так:
SELECT
`orders`.*,
GROUP_CONCAT(
CONCAT(
`menu_items`.`name`,
' ($',
FORMAT(`menu_items`.`price`,2),
')'
) SEPARATOR '<br>'
) as `items`,
SUM(`menu_items`.`price`) as `additional`,
`children`.`first_name`,
`children`.`last_name`,
`organizations`.`base_price`
FROM
`orders`, `order_items`, `menu_items`, `children`, `organizations`
WHERE
`order_items`.`menu_item_id` = `menu_items`.`id` AND
`order_items`.`order_id` = `orders`.`id` AND
`orders`.`added_by` = {$user_id} AND
`orders`.`date` > '{$cutoff}' AND
`children`.`id` = `orders`.`child_id` AND
`organizations`.`id` = `children`.`organization_id`
GROUP BY
`orders`.`id`
Я знаю, что это чудовище, и что некоторые люди умрут, прежде чем не будут использовать явные объединения. Однако, игнорируя это, я хочу использовать только CONCAT внутри GROUP_CONCAT, если menu_items.price больше 0, в противном случае возвращать только menu_items.name. Однако я безуспешно пытался вставить туда IF. Я прочитал руководство, но все способы, которые я пробовал, не работают, и я почти уверен, что мне что-то не хватает во всей этой условной инструкции.
Хахаха. Ну, иногда ты должен делать то, что должен. И в этом трюк. :)


Вы пробовали использовать что-то подобное?
CASE WHEN 'menu_items'.'price' = 0 THEN 'menu.items'.'name' ELSE CONCAT (etc) END
Замена инструкции CONCAT конечно.
Что-то вроде этого должно работать (но я не тестировал, извините):
GROUP_CONCAT(
CONCAT(
`menu_items`.`name`,
IF(`menu_items`.`price` > 0, -- <condition>
CONCAT(' ($', FORMAT(`menu_items`.`price`,2), ')'), -- <true-expr>
'' -- <false-expr>
)
)
SEPARATOR '<br>'
) as `items`,
Функция IF() действительно проста:
IF( <condition>, <true-expr>, <false-expr> )
Функция имеет три аргумента: первый - <condition>. Если условие истинно, функция возвращает результат <true-expr>. В противном случае функция возвращает результат <false-expr>.
Все становится труднее делать правильно, когда вы используете действительно длинные многострочные выражения, содержащие круглые скобки, запятые и так далее. Просто нужно делать это осторожно. Я предлагаю начать с более простых выражений, а затем наращивать.
ооо, форматирование строк внутри SQL меня злит! Особенно <br>, здесь никакой опасности MVC! :) С моей грудью, вы всегда можете обернуть CONCATed строку с REPLACE (X, '<br> ($ 0.00)', ''), если вы не можете понять ничего другого.