选择基于多行

时间:2012-02-21 19:58:08

标签: mysql

全部, 说我有以下数据集:


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这些值。

谢谢!

3 个答案:

答案 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);