MYSQL多行左连接(php搜索函数)[重复]

utugiqy6  于 2023-02-28  发布在  PHP
关注(0)|答案(1)|浏览(120)
    • 此问题在此处已有答案**:

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。
有什么需要帮忙的吗?

swvgeqrz

swvgeqrz1#

您需要计算每个产品的匹配记录数,并确保该数字与您要搜索的特征数一样大。
WHERE子句需要使用OR(或通过IN())选择具有匹配要素ID的记录,因为您需要产品的 * 所有 * 与给定要素匹配的记录。您仍然需要GROUP BY产品,然后要求组中记录的COUNT与条件HAVING COUNT(*) = 2匹配
2将根据$features中的条目数动态确定。

相关问题