好的,所以我的查询看起来像这样:
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
大于0,则忽略这一点,我只想使用GROUP_CONCAT
内的menu_items.price
,否则只返回menu_items.name
。但是,我试图在那里抛出一个IF
没有成功。我已经阅读了手册,但我尝试过的所有方法都没有用,而且我很确定我在整个条件语句中都缺少一些东西。
答案 0 :(得分:5)
您是否尝试过使用此类内容?
CASE WHEN 'menu_items'.'price' = 0 THEN 'menu.items'.'name' ELSE CONCAT (etc) END
当然替换CONCAT
声明。
答案 1 :(得分:1)
这样的事情应该有效(但我没有测试,对不起):
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,则函数返回<true-expr>
的结果。否则该函数返回<false-expr>
的结果。
当你使用包含括号和逗号等的非常长的多行表达式时,事情变得更难。你必须小心谨慎。我建议从更简单的表达开始然后再建立。