gpt4 book ai didi

PHP/SQL - 查询关系数据库中的 ID,但能够使用 ORDER BY 在单独的数据库中查询这些 ID

转载 作者:行者123 更新时间:2023-11-29 10:01:30 25 4
gpt4 key购买 nike

我有一个电子商务网站,其中有一些产品可以属于多个类别。

因此,我有一个产品表、一个类别表和一个产品类别表。

所以我要做的就是在product_categories 表中查询我想要的类别的类别ID,并获取一个产品ID 数组,如下所示:

$product_ids = [];
$params = [$category_id];
$sql = "SELECT * FROM product_categories WHERE category_id=?";
$stmt = DB::run($sql,$params);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$product_id = $row['product_id'];
array_push($product_ids,$product_id);
}

然后我有一个 show_products 函数,它获取数组并吐出所有产品。然而,这个函数有一个 foreach 语句,如下所示:

foreach($ids as $id){
$params = [$id];
$sql = "SELECT * FROM products WHERE id=?";
$stmt = DB::run($sql,$params);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
//show products
}
}

这很好,但我希望能够确定产品的显示顺序,因此在我的产品表中,我有一个“order_by”列,并且想要执行类似 SELECT * FROM 的操作产品在哪里 id=? ORDER BY order_by ASC

显然,我目前的设置方式意味着它一次查询 1 个 id,因此无法以这种方式对它们进行排序。

我想解决这个问题,我需要像上面那样查询我的产品,但我不会在这个阶段显示产品,而是获取 order_by 列并创建另一个数组并按此顺序对它们进行排序,然后实际上使用该数组再次查询并显示产品。

有更好的方法吗?

**注意:我希望将我的 show_products 函数单独用于我网站的其他部分,因为它相当复杂(获得“低至”价格和库存水平等)。所以我希望能够将 ID 数组传递给这个函数。

最佳答案

您所需要的只是将一些逻辑从 PHP 代码移至 SQL 查询。我认为要做到这一点,你也应该修改你的 show_products 函数,看看 JOIN语法和GROUP_CONCAT函数语法。

以下是使用简单 JOIN 和 GROUP_CONCAT 聚合函数可以执行的操作的示例(假设具有 products.name 和categories.description 列):

    SELECT P.ID, P.name, GROUP_CONCAT(C.description) 
FROM products P
INNER JOIN product_categories PC ON P.category_id = PC.id
INNER JOIN categories C ON PC.category_id = C.id
GROUP BY P.ID, P.name

关于PHP/SQL - 查询关系数据库中的 ID,但能够使用 ORDER BY 在单独的数据库中查询这些 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52851273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com