我只是学习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查询中执行此操作但是我必须多次查询才能获得所有值,不是吗?
答案 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']