gpt4 book ai didi

php - 在 mySQL 中动态选择表

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

我在 mySQL 中有一个查询

SELECT id FROM admin_products;

它返回一个 id 列表,就像这样

+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+

我正在使用 PHP 动态生成表格,例如

vendor_1, vendor_2, vendor_3, vendor_4, vendor_5

现在我想编写一个查询以从表 id 中检索 pricequantity

例如

“在此输入查询”

应该找回

+-----------------------------+
| id | price | quantity |
+-----------------------------+
| 1 | 23| 13| // price and quantity retrieved from table vendor_1 since id=1
| 2 | 158| 85| // price and quantity retrieved from table vendor_2 since id=2
| 3 | 15| 7| // price and quantity retrieved from table vendor_3 since id=3
| 4 | 112| 9| // price and quantity retrieved from table vendor_4 since id=4
| 5 | 123| 199| // price and quantity retrieved from table vendor_5 since id=5
+-----------------------------+

我现在用 PHP 做的是:

$conn = mysqli_connect($server,$user,$pwd,$db);
$sql = "SELECT id FROM admin_products";
$res = mysqli_query($conn,$sql);
if(mysqli_num_rows($res)>0){
while($row = mysqli_fetch_assoc($res)){
$product = array();
$innerSQL = "SELECT price,quantity FROM vendor_".$row['id'];
$innerRes = mysqli_query($conn,$innerSQL);
if(mysqli_num_rows($innerRes)>0){
while($innerRow = mysqli_fetch_assoc($innerRes)){
array_push($product,$row['id']);
array_push($product,$innerRow['price']);
array_push($product,$innerRow['quantity']);
}
}
}
}

但它需要两次点击 mySQL 数据库。不能减为一吗?

编辑

后来我意识到我的数据库结构不正确,动态创建表是一个非常糟糕的主意,以后可能会带来灾难

最佳答案

-解决方案1:

注意:只有在您的 vendor_x 表 id 中有供应商 ID 才能与之匹配时,这才有效。 (正如 Strawberry 所说,动态生成表格是一个糟糕的想法)。

选择正确的 ID 后,您可以执行以下操作:

  • 连接到 MySql 服务器

然后您可以创建表名并将其存储在变量中。

$tableName = 'vendor_' . $id;

我会建议在那之后用一个简单的查询来检查表是否存在:

$sql = "SHOW TABLES LIKE '$tableName'";

如果这返回空结果,您可以抛出一个表不存在的异常或以任何您喜欢的方式处理它。

在检查每个表并确保其存在后,您可以创建查询。

$joins = "";

$sql = "
SELECT
v.id,
price,
quantity
FROM
vendors AS v
";

foreach ($ids as $id) {
$tableName = "vendor_" . $id;
$tableAlias = "v".$id;

$joins .= " LEFT JOIN " . $tableName . " AS ". $tableAlias ."
ON (v.id = ". $tableAlias .".vendor_id) ";
}

$sql .= $joins;

然后执行查询。

-解决方案2:

只创建一个表来管理您的供应商。它应该有这样的结构:

`id` // AI value
`vendor_id` // The id of the vendor to easily join it afterwards
`price`
`quantity`

您可以将其命名为 vendor_product 或其他名称

现在您只有一个简单的查询:

$sql = "
SELECT
v.id,
vp.quantity,
vp.price
FROM
vendors AS v
LEFT JOIN vendor_product AS vp
ON (vp.vendor_id = v.id)
";

编辑关于结构的评论:

供应商需要一张表,例如:

`vendor`:
`id`, //AI value
`username`,
`password` // I suggest to you not to keep it in plain text.

`vendor_product` :
`id`, //AI value
`vendor_id`,
`price`,
`quantity`

我不知道您是否要在此处存储有关每种产品的更多信息,但这应该可以解决问题。

如何以最低价格展示产品?您需要以某种方式匹配它们,并按选择的最低价格进行分组。

关于php - 在 mySQL 中动态选择表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38843759/

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