6

例如,如果 queue_watch 显示 0,我希望实际的 mysql 输出说 No,否则说 Yes。改变方案不是一种选择。

SELECT user.user_name, queue.queue_name, queue_access.queue_access,
    queue_access.queue_watch
FROM queue_access
INNER JOIN user ON user.user_id = queue_access.user_id
INNER JOIN queue ON queue.queue_id = queue_access.queue_id
WHERE queue_access <> '' OR queue_watch = 1
ORDER BY user_name;

SQL 可以满足我的需要,但我想知道是否可以使用 SQL 而不是 PHP 更改输出。此外,是否可以将一行中的所有 queue_name 分组到每个 user_name,这样我就不必返回 153 行。

谢谢

4

2 回答 2

9

这不是一个过头。我觉得最好在查询中完成。

尝试这个 -

SELECT user.user_name, queue.queue_name, queue_access.queue_access,
       IF(queue_access.queue_watch = 0, 'No', 'Yes')
FROM queue_access
INNER JOIN user ON user.user_id = queue_access.user_id
INNER JOIN queue ON queue.queue_id = queue_access.queue_id
WHERE queue_access <> '' OR queue_watch = 1
ORDER BY user_name;
于 2012-05-22T20:12:42.447 回答
5

您可以使用标准CASE表达式。有两种稍微不同的方式来编写CASE表达式。

简单案例表达:

SELECT
    CASE queue_access.queue_watch
        WHEN 0 THEN 'No'
        ELSE 'Yes'
    END AS your_alias,
    ...

搜索案例表达式:

SELECT
    CASE WHEN queue_access.queue_watch = 0 THEN 'No' ELSE 'Yes' END AS your_alias,
    ...

或者您可以使用 MySQL 特定的IF构造:

SELECT
    IF(queue_access.queue_watch, 'Yes', 'No') AS your_alias,
    ...

您可能需要考虑如果您的值不是 0 或 1 会发生什么。

于 2012-05-22T20:12:37.003 回答