gpt4 book ai didi

php - mysql join 右边获取多行

转载 作者:可可西里 更新时间:2023-11-01 08:44:36 26 4
gpt4 key购买 nike

我有两个表:

# products (id,name,value,time)

# product_data (id,product_id,field_name,field_value)
(1,1,color,red)
(2,1,size,big)
(3,1,whatever,value)

我想进行一个查询,从产品表中获取字段值,并添加具有相同产品 ID 的所有 product_data 行,如下所示:

$row = array(
id => 1,
name => Gloves,
value => 15,
color => red,
size => big,
...
)

也许这不是存储所有数据的好方法,我应该将所有字段存储在一个表中,但由于会有很多不同的产品类型,因此总会有很多空字段。查询会像那样简单得多,因为我必须能够按颜色对产品进行排序(例如,按 products_data 中的值)。

例如,我试过这个,但这只列出字段名称,而不是值:

SELECT *,
group_concat(product_data.fname) AS afield
FROM product_data
LEFT JOIN products ON products.id = product_data.pid

最佳答案

看看这个solution和问题,因为它们有些相似。它涉及触发两个查询并使用 PDO::FETCH_GROUP。您将得到一个类似于此行的 $product 行:

$product = [
'id' => 1,
'name' => 'somename',
...
'product_data' => [
['field_name'=> 'color', 'value'=> 'red'],
['field_name'=> 'size', 'value'=> 'XXL'],
.
.
.
['field_name' => 'fabric', 'value' => 'cotton']
]
];

这是我根据上述提示得出的版本:

$db = getConnection();
$sql_products = "SELECT * FROM products";
$stmt = $db->prepare($sql_products);
$stmt->execute();
$products = $stmt->fetchAll(PDO::FETCH_OBJ);
$productIds;
foreach ($products as $product) {
$productIds[]=$product->id;
}
$productIds = implode(',',$productIds);
$sql_data = "SELECT product_id, field_name, field_value FROM product_data WHERE product_id IN ($productIds)";
$stmt = $db->prepare($sql_data);
$stmt->execute();
$products_data = $stmt->fetchAll(\PDO::FETCH_GROUP|\PDO::FETCH_OBJ);
foreach ($products as &$product) {
if(isset($products_data[$product->id])){
$product->data = $products_data[$product->id];
} else {
// no data found, empty array
$product->data = [];
}
}
echo json_encode($products);

关于php - mysql join 右边获取多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32200444/

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