我尝试进行查询以获取有关 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 。
答案 0 :(得分:1)
假设两个表中的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)).")");
编辑: 如果找到客户是否显示真/假,请使用
之类的内容$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 ()
。)
(请注意,我假设您在使用之前清理了查询的输入变量)
答案 1 :(得分:0)
试试这个:如果我对您的要求是对的,那么您可以使用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