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

PHP/SQL-查询关系数据库中的ID,但能够使用ORDERBY在单独的数据库中查询这些ID,php,mysql,Php,Mysql,我有一个电子商务网站,我有一些产品,可以在多个类别 因此,我有一个产品表、一个类别表和一个产品类别表 因此,我要做的是查询product_categories表中我想要的类别的类别ID,并获得一个产品ID数组,如下所示: $product_ids = []; $params = [$category_id]; $sql = "SELECT * FROM product_categories WHERE category_id=?"; $stmt = DB::run($sql,$params);

我有一个电子商务网站,我有一些产品,可以在多个类别

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

因此,我要做的是查询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 products WHERE id=?按订单\按ASC订购

显然,我目前的设置方式意味着它一次查询1个id,所以它不能以这种方式排序

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

有更好的方法吗


**注意:我想将我的
show_产品
功能分开,以便在我的网站的其他部分使用,因为它相当复杂(价格和库存水平“低至”等)。所以我希望能够将一个ID数组传递给这个函数。

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

下面是一个使用简单联接和GROUP_CONCAT聚合函数(假设有products.name和categories.description列)的示例:


这是我的最后一个SQL查询

SELECT product_categories.product_id
FROM product_categories INNER JOIN products ON product_categories.product_id=products.id
WHERE product_categories.category_id=?
ORDER BY products.order_by ASC

您确实需要研究sql连接语法,以便将所有这些都作为一个查询得到。Hi。嗯,你的问题似乎很模糊,但你没有确切说出你想做什么。最小化你的代码?调整性能?改进对数据库的查询?没有确切的理解,很难说我们能给出什么样的建议。如果你有很多问题,让我们开始一个接一个地问
SELECT product_categories.product_id
FROM product_categories INNER JOIN products ON product_categories.product_id=products.id
WHERE product_categories.category_id=?
ORDER BY products.order_by ASC