Найти конкретное значение во 2-й строке и отобразить значение в 3-й строке

Я просто изучаю 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' но тогда я должен был бы запросить его много раз, чтобы получить все значения, нет?

1

Решение

Вместо того, чтобы выполнять запросы для каждой строки, просто создайте свой массив как пары ключ-значение, запросите только по идентификатору пользователя.

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']

0

Другие решения

Один из способов сделать это — сделать сводку, чтобы метакейсы стали возвращаемыми именами столбцов.

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']
0

По вопросам рекламы [email protected]