- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有两个表:
# 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/
我必须为 IE11 编写一些网格回退。 我想将元素 4 放在右下角,以便元素 1 可以一直向下延伸到底部吗? 我认为这对 flexbox 来说是不可能的,对吧? : https://jsfiddle.
您好,我正在尝试让 2 个 div 在左侧与右侧对齐。 #div1 #div2 #div1 #div2 #div3 #div2 #div3 #div3 诀窍是当浏览器窗口变小时,我希望#div2 位于
如何才能点击 EditText 的右侧可绘制对象(查看屏幕截图)?我尝试了几种方法,但总是卡住。 public static Matcher withEditTextDrawable(final in
这个问题在这里已经有了答案: In CSS Flexbox, why are there no "justify-items" and "justify-self" properties? (6
所以我有 10 个复选框,每个标签都取自数组中相应的索引。我正在使用 ng-repeat 来展示它们: {{entity}}
我是一名优秀的程序员,十分优秀!