gpt4 book ai didi

php - 如何在 PostgreSQL 中实现循环

转载 作者:行者123 更新时间:2023-11-29 13:12:50 25 4
gpt4 key购买 nike

我对在我的 PostgreSQL 查询中实现循环感到头疼。

在我的数据库中有两个表:

Table category
-----------------
pro_cat_id int,
pro_cat_name text

Table product_list
---------------------------------------------------
pro_id int,
pro_name text,
pro_cat_id int (foreign key to category.pro_cat_id)

我可能在类别表中有 5-6 个值。所以我写了一个查询,看起来像这样

SELECT pro_id, pro_name, pro_cat_id
FROM pro_list
WHERE pro_cat_id = 65
LIMIT 18

UNION ALL

SELECT pro_id, pro_name, pro_cat_id
FROM pro_list
WHERE pro_cat_id = 80
LIMIT 18

所以我想要的是使用循环编写一个简单的查询,以便查询是动态的。

因此类别中的值可能会发生变化。管理员可以添加一些可能的类别值。如果我不使用循环,代码将是静态的。为了使其动态,我想使用循环

最佳答案

PostgreSQL 中的循环仅在存储过程/函数中可用。但我不确定你是否真的需要一个循环来解决你的问题:


demo: db<>fiddle (限制 == 5)

SELECT pro_id, pro_name, pro_cat_id 
FROM (
SELECT
pro_id,
pro_name,
pro_cat_id,
row_number() OVER (PARTITION BY pro_cat_id)
FROM pro_list
WHERE pro_cat_id IN (65, 80) -- changing the category list
)s
WHERE row_number <= 18 -- changing the product limit

您可以简单地更改内部 WHERE 子句中的 pro_cat_id 列表。如果您想更改类别,只需更改此列表即可。这取决于您的后端代码以及您希望如何更改类别 ID:您应该能够将列表或数组作为参数传递到查询中。所以你的代码可以看起来像:

... WHERE pro_cat_id IN ?      -- for lists, as demonstrated
... WHERE pro_cat_id = ANY(?) -- for arrays (see fiddle)

要限制产品,您可以更改外部 WHERE 子句中的值。

row_number() 窗口函数 (https://www.postgresql.org/docs/current/static/tutorial-window.html) 为每个类别创建行计数。因此,您可以按最大行数进行过滤。


编辑: Here is explained how to pass an array into an sql query in PHP

$sql = "<the query from above> WHERE pro_cat_id IN ('$categoryIds')";

关于php - 如何在 PostgreSQL 中实现循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52687329/

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