如何在SQL中使用布尔值

时间:2012-09-27 15:15:17

标签: php mysql

我有这个很长的查询工作正常。我需要添加一个boolean元素。

编辑:QUERY已经更新。反映下面的答案。新问题:对于每个项目,它现在为每个评级显示一行。例如,如果4个人对它进行评级,那么如果我是其中一个评分者,它将显示一行isMatched = 1;其他三个将是isMatched = 0.如果有两个ratnigs,而我不是,则isMatched显示0两次。

   $result=mysql_query("
                SELECT i.item,
                    IF (ra.user_id = '{user}',1,0) AS isMatched, 
                r.ratetotal AS total,
                c.commtotal AS comments,
                r.rateav AS rate
                FROM items AS i
                LEFT JOIN master_cat AS c
                    ON (c.cat_id = i.cat_id)
                    LEFT JOIN ratings AS ra
                            ON (i.items_id = ra.item_id)
                LEFT JOIN
                    (SELECT item_id, 
                    COUNT(item_id) AS ratetotal, 
                    AVG(rating) AS rateav 
                    FROM ratings GROUP BY item_id) AS r 
                ON r.item_id = i.items_id
                LEFT JOIN
                    (SELECT item_id, 
                    COUNT(item_id) AS commtotal 
                    FROM comments GROUP BY item_id) AS c
                ON c.item_id = i.items_id
                WHERE c.category = '{$cat}'  AND i.spam < 30
                 {$order};");

我想再添加一个功能。这是一个基于用户的系统,一些用户会在名为ratings的表中对项目进行评级。表格中的每个评分都会有一个user_id,以匹配每行中item_id的评分。在上面未显示的PHP代码中,我将可以与我的WHERE子句的user_id进行比较。

我只是想在此查询中添加某种类型的boolean,在其中创建一个新列,以显示user_id是否与当前登录用户匹配为true / false。

最终,我用JSON打印出来并推送到Java用于Android应用程序。在应用程序中,如果SQL查询找到任何“true”匹配项,我希望istView中的任何项目显示为“粗体”。最后一点与SQL无关,我只是想解释一下应用程序。

可以通过这种方式修改此查询吗?

2 个答案:

答案 0 :(得分:2)

它可能有效:

像这样编辑SQL的开头:

$result=mysql_query("
            SELECT i.item,
            IF(i.user_id={$userID},1,0) AS isMatched, /* Added this line assuming you have user IDs in i.user_id column of DB and $userID var of PHP contains current user ID */
            r.ratetotal AS total,
            c.commtotal AS comments,
            r.rateav AS rate
            FROM items AS i
            LEFT JOIN master_cat AS c
                ON (c.cat_id = i.cat_id)
            LEFT JOIN
                (SELECT item_id, 
                COUNT(item_id) AS ratetotal, 
                AVG(rating) AS rateav 
                FROM ratings GROUP BY item_id) AS r 
            ON r.item_id = i.items_id
            LEFT JOIN
                (SELECT item_id, 
                COUNT(item_id) AS commtotal 
                FROM comments GROUP BY item_id) AS c
            ON c.item_id = i.items_id
            WHERE c.category = '{$cat}'  AND i.spam < 30
             {$order};");

现在,您的结果将包含isMatched,其中包含0或1个值。

答案 1 :(得分:1)

我不相信mysql有一个真正的布尔类型。我通常使用tinyInt并设置为0或1.

您可以在选择查询中使用mysql IF语句。假设您的用户表是u而您的用户ID字段是user_id

 IF (u.userId = '{$user_id}', 1, 0) as user_boolean

但是,我不确定这是否真的适用于您的查询,因为您的查询是抓取汇总数据,而不是单个用户的评级。我必须有更多的信息(比如表格,字段和关系)才能进一步提供帮助。