php - 如何在 SQL 中使用 bool 值

标签 php mysql

<分区>

我有一个非常长的查询,效果很好。我需要向其中添加一个 boolean 元素。

编辑:查询已更新。反射(reflect)下面的答案。新问题:对于每个项目,它现在为每个评级显示一行。例如,如果有 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/错误的。

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

这个查询可以这样修改吗?

最佳答案

它可能有效:

像这样编辑 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 个值。

关于php - 如何在 SQL 中使用 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624664/

相关文章:

php - 如何在单选按钮中显示数量值

php - MySQL 以什么顺序处理来自 2 个不同连接的查询?

mysql - 为什么 "join on or"比两个 "join on"慢得多?

php使用pdo简单登录系统问题

mysql 获取列名的最高值

php - UTF-8贯穿始终

php - 如何跨多个子域使用 session 变量?

javascript - 如何使用 PHP 和 AJAX 从 MySQL 创建 JavaScript 变量?

php - PATCH 请求 403 Forbidden

mysql - 将一列与不同表中的另一列进行比较并将值输入另一列触发MySQL