在第2行中查找特定值并从第3行显示值

时间:2014-09-15 05:30:13

标签: php mysql mysqli

我只是学习mysql所以这可能非常简单。

我有一个包含3行的表格,其中包含以下示例数据

user_id    metakey       meta_value
  1        image_type    avatar
  1        location      london
  1        image_url     1.jpg
  2        image_type    facebook
  2        location      somewhere
  2        image_url      

如果我想要来自另一个meta_value的{​​{1}}数据,如何在不重新查询表的情况下获取meta_value的值?

所以1->位置会显示伦敦2> image_type会显示facebook等等。

随着一点点摆弄,我最终来到这里:

metakey

然后转到$query_usermeta = "SELECT * FROM usermeta WHERE user_id = '$user_id'" or die("Error in the consult.." . mysqli_error($link)); //execute the query. $result_usermeta = mysqli_query($link, $query_usermeta); /* associative array */ $userdatameta = $result_usermeta->fetch_array(MYSQLI_ASSOC); ,但如何指定要显示的meta_value?

我知道我可以在echo $userdatameta['meta_value']之类的mysql查询中执行此操作但是我必须多次查询才能获得所有值,不是吗?

2 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是执行数据透视,以便metakey成为返回的列名。

SELECT user_id,
       CASE WHEN metakey = 'image_type' THEN meta_value END as image_type,
       CASE WHEN metakey = 'location' THEN meta_value END as location,
       CASE WHEN metakey = 'image_url' THEN meta_value END as image_url
FROM usermeta 
WHERE user_id = '$user_id'

然后您可以通过metakey选择meta_value

echo $userdatameta['location']

答案 1 :(得分:0)

不是为每一行运行查询,而是将数组构建为键值对,仅按用户ID

进行查询

SELECT * FROM usermeta WHERE user_id = '$user_id'

循环结果

$metaData=array();

while($row = $result_usermeta->fetch_array())
{
$metaData[$row['metakey']] = $row['meta_value'];
}

现在在$metaData中,您将值设为键值对

array(
    'image_type'=>'avatar',
    'location' =>'london',
    'image_url'=>'1.jpg'
)

现在使用您的值作为图片网址echo $metaData['location']

的位置echo $metaData['image_url']