繁体   English   中英

PHP合并查询左联接,如果否则语句

[英]php merge queries left join and if else statement

我正在尝试查询以获取有关productID,numOfLikes,isLiked的信息。

问题是我不知道如何将第一个查询与第二个查询合并。

  1. 第一个查询在数字数组上运行,并从数据库中返回产品的productID,numOfLikes

     $result = $connection->query("SELECT productID, numOfLikes FROM Products WHERE productID IN (".implode(", ", array_map('intval', $arr))); 
  2. 第二个查询检查productIDcustomerID的匹配项是否出现在CustomerProduct的表的同一行中。

     "SELECT customerID, productID FROM CustomerProducts WHERE productID = ".$productID." AND customerID = ".$customerID; 

而且我想知道如果找到匹配项,如何使第二个查询返回true。

如果有帮助,我添加了数据库模式。

数据库架构

编辑:
发送到php页面的数据如下所示:
{ customerId107678695429 ,gArrayOfProductIds:[{productId:52979957765},{productId:69128650757},{productId:69757075461},{productId:69833654277}]}

例:

第一个查询:
在此处输入图片说明

CustomerProducts表,其中包含从数据提供的productIds:
在此处输入图片说明

合并后查询:
在此处输入图片说明

如您所见,customerId:107678695429喜欢3个产品,但不喜欢第4个,因此很多人都喜欢这个产品。

非常感谢可能会帮助您的人。

回答:

我结合了rolfv1Susang的答案。

查询:

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 JOINCASE来实现所需的输出

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM