我有这个很长的查询工作正常。我需要添加一个boolean
元素。
$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无关,我只是想解释一下应用程序。
可以通过这种方式修改此查询吗?
答案 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
但是,我不确定这是否真的适用于您的查询,因为您的查询是抓取汇总数据,而不是单个用户的评级。我必须有更多的信息(比如表格,字段和关系)才能进一步提供帮助。