[英]php merge queries left join and if else statement
我正在尝试查询以获取有关productID,numOfLikes,isLiked的信息。
问题是我不知道如何将第一个查询与第二个查询合并。
第一个查询在数字数组上运行,并从数据库中返回产品的productID,numOfLikes 。
$result = $connection->query("SELECT productID, numOfLikes FROM Products WHERE productID IN (".implode(", ", array_map('intval', $arr)));
第二个查询检查productID和customerID的匹配项是否出现在CustomerProduct的表的同一行中。
"SELECT customerID, productID FROM CustomerProducts WHERE productID = ".$productID." AND customerID = ".$customerID;
而且我想知道如果找到匹配项,如何使第二个查询返回true。
如果有帮助,我添加了数据库模式。
编辑:
发送到php页面的数据如下所示:
{ customerId : 107678695429 ,gArrayOfProductIds:[{productId:52979957765},{productId:69128650757},{productId:69757075461},{productId:69833654277}]}
例:
CustomerProducts表,其中包含从数据提供的productIds:
如您所见,customerId:107678695429喜欢3个产品,但不喜欢第4个,因此很多人都喜欢这个产品。
非常感谢可能会帮助您的人。
回答:
我结合了rolfv1和Susang的答案。
查询:
SELECT p.productID, p.numOfLikes, CASE WHEN cp.customerID IS NULL THEN 'false' ELSE 'true' END isLiked FROM Products p LEFT JOIN CustomerProducts cp ON cp.productID = p.productID AND cp.customerID = 107678695429 WHERE p.productID IN (52979957765,69833654277,69757075461,69128650757)
PHP查询:
$result = $connection->query("SELECT p.productID, p.numOfLikes,CASE WHEN cp.customerID IS NULL THEN 'false' ELSE 'true' END isLiked FROM Products p LEFT JOIN CustomerProducts cp ON cp.productID = p.productID AND cp.customerID = ".$customerID." WHERE p.productID IN (".implode(", ", array_map('intval', $arr)).")");
非常感谢rolfv1和Susang 。
假设两个表中的productID
相同,则可以使用以下查询:
$result = $connection->query("SELECT p.productID, p.numOfLikes, cp.customerID FROM Products p LEFT JOIN CustomerProducts cp ON cp.productID = p.productID WHERE p.productID IN (".implode(", ", array_map('intval', $arr)).")");
编辑:并显示true / false,如果找到或没有客户,请使用类似
$result = $connection->query("SELECT p.productID, p.numOfLikes, cp.customerID, CASE WHEN cp.customerID IS NULL THEN 'false' ELSE 'true' END customerFound FROM Products p LEFT JOIN CustomerProducts cp ON cp.productID = p.productID WHERE p.productID IN (".implode(", ", array_map('intval', $arr)).")");
(还要注意,在查询末尾添加了括号以关闭IN ()
。)
(请注意,我假设您在使用输入变量之前先对其进行了清理)
尝试一下:如果我对您的要求是正确的,那么您可以使用LEFT JOIN
和CASE
来实现所需的输出
SELECT CASE WHEN cp.productID IS NULL THEN 0 ELSE 1 END AS TrueFalse
FROM products p
LEFT JOIN CustomerProducts cp ON cp.productID = p.productID
AND cp.productID = 5 AND cp.customerID = 6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.