Я просто изучаю 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
без повторного запроса к таблице каждый раз, если я хочу meta_value
данные из другого metakey
?
Так что 1-> location будет отображать london 2-> image_type будет отображать facebook и так далее.
Немного повозившись, я оказался здесь:
$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);
затем собирается echo $userdatameta['meta_value']
но как мне указать, какое meta_value отображать?
Я знаю, что могу сделать это в запросе MySQL, как WHERE metakey = 'location'
но тогда я должен был бы запросить его много раз, чтобы получить все значения, нет?
Вместо того, чтобы выполнять запросы для каждой строки, просто создайте свой массив как пары ключ-значение, запросите только по идентификатору пользователя.
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']
для URL изображения echo $metaData['image_url']
Один из способов сделать это — сделать сводку, чтобы метакейсы стали возвращаемыми именами столбцов.
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'
Затем вы можете выбрать meta_value с помощью метаключа
echo $userdatameta['location']