- 此问题在此处已有答案**:
SELECTING with multiple WHERE conditions on same column(12个答案)
4天前关闭。
我有两张表:* * 产品:**
| 身份证|姓名|
| - ------|- ------|
| 1个|产品1|
| 第二章|产品2|
和功能到产品:
| 身份证|乘积|特征标识符|特写|
| - ------|- ------|- ------|- ------|
| 1个|1个|七|三个|
| 第二章|1个|五个|三个|
| 三个|第二章|五个|三个|
我正在尝试搜索有一些功能ID的产品,我有3个选项:
如果我搜索featureid 7,我只需要得到产品1。如果我搜索featureid 5,我需要得到产品1和2。如果我搜索featureid 5和featureid 7,我只需要得到产品1。
这是我的PHP函数:
function Get_products3($id,$q)
{
$query = "SELECT p.*
FROM products p
INNER JOIN featuretoproduct fp
ON p.id = fp.productid
".$q."
GROUP BY fp.productid ORDER BY p.id ASC";
$Container_db = Sdba::db();
$Container_db->query($query);
return $Container_db->result();
}
我有一个字符串来处理左连接的最终查询字符串:
$query = " WHERE ( ";
第二部分:
$features = ["7","5"]; //this can be change to different variations like ["5"] or ["7"] or ["7","5"]...
foreach($features as $item):
$query.="fp.featureid = ".$item." AND ";
endforeach;
//last part (close the query string and remove " AND " from last loop):
$query = substr($query, 0, -5)." )";
这里我调用函数:
$checker = Get_products3($_GET["id"],$query);
我试着在循环中用OR代替AND但是如果我选择
["7","5"]
我得到两个产品而不是产品1。
有什么需要帮忙的吗?
1条答案
按热度按时间swvgeqrz1#
您需要计算每个产品的匹配记录数,并确保该数字与您要搜索的特征数一样大。
WHERE子句需要使用
OR
(或通过IN()
)选择具有匹配要素ID的记录,因为您需要产品的 * 所有 * 与给定要素匹配的记录。您仍然需要GROUP BY产品,然后要求组中记录的COUNT与条件HAVING COUNT(*) = 2
匹配2
将根据$features中的条目数动态确定。