全部, 说我有以下数据集:
id docId meta_key meta_value
1 356 rating 2.0
2 356 total_votes 10
3 356 total_rating 200
基本上我试图通过选择356的docId并仅选择我列出的meta_key行来提取meta_value列中的所有值。
如何在单个查询中执行此操作?
编辑:我想要的输出是这样的:
rating total_votes total_rating
2.0 10 200
我试图得到它,以便我可以在PHP中使用mysql_fetch_array这些值。
谢谢!
答案 0 :(得分:0)
docId 356所有行的所有列
SELECT * FROM mytable WHERE docId = 356;
仅docId 356的所有行的meta_value列
SELECT meta_value FROM mytable WHERE docId = 356;
将所有值作为docId 356
的逗号分隔列表SELECT GROUP_CONCAT(meta_value) meta_values FROM mytable WHERE docId = 356;
答案 1 :(得分:0)
$query = mysql_query("SELECT * FROM table WHERE docId=356");
while ($result = mysql_fetch_array($query)) {
$metaKey = $result['meta_key'];
$meta_value = $result['meta_value'];
echo $meta_key.' : '.$meta_value.'<br>';
}
答案 2 :(得分:0)
你要求的是pivot table。不幸的是,MySQL没有提供生成数据透视表的功能。
它仍然可行,但有两列以上,它开始变得混乱。
我会在PHP中循环记录并构建数组。
从Ghost Developer的回答中略微借用:
$assoc_array = array();
$query = "SELECT meta_key, meta_value FROM table WHERE docId=356";
$result = mysqli_query($link, $query);
while ($row = mysqli_fetch_assoc($result)) {
$assoc_array[$row['meta_key']] = $row['meta_value'];
}
mysqli_free_result($result);