Как получить две переменные, используя MYSQL GROUP_CONCAT?

У меня есть веб-страница с фотографиями ($file)под каждой фотографией находится список пользователей, которым «понравилась» каждая фотография.
Каждый пользователь отображается в виде ссылки html на его профиль. В настоящее время пользователи отображаются и связаны своими именами пользователей:

<a href=\"profile.php?user_name=".$tag.">".$tag."</a>

Но мне интересно, как я могу отобразить имя пользователя, но ссылку на его профиль, используя их $user_id, Что-то вроде

<a href=\"profile.php?user_name=".$user_id.">".$tag."</a>

Я использую GROUP_CONCAT в запросе, чтобы получить все user_id ($tag) что понравилось каждое фото от tbl_collab а затем присоединиться к этим результатам на tbl_users чтобы получить user_name но я не могу понять, как отобразить и user_id, и user_name в html-ссылках. Может кто-нибудь сказать мне, как это можно сделать?

//Database Query
$sql="SELECT up.file,p.user_name,p.user_id, GROUP_CONCAT(cp.user_name)
FROM tbl_uploads up
LEFT JOIN tbl_users p ON up.user_id = p.user_id
LEFT JOIN tbl_collab c ON up.file = c.file
LEFT JOIN tbl_users cp ON cp.user_id = c.collab_userid
GROUP BY up.file";

$result = $mysqli->query($sql);
while($row = $result->fetch_array())
{
$user_id = explode (",", $row['user_id'] );
$user = explode (",", $row['user_name'] );
$files = explode (",", $row['file']);
$tag_array = explode(',' , $row['GROUP_CONCAT(cp.user_name)']);

foreach($files as $file) {

//File is displayed here

}
foreach($tag_array as $tag) {

//Links to the users who liked the file

<a href=\"profile.php?user_name=".$tag.">".$tag."</a>

}
}

2

Решение

в вашем SQL получите оба значения в вашем GROUP_CONCAT:

GROUP_CONCAT(CONCAT(cp.user_id,'~',cp.user_name) SEPARATOR '|') AS tagGroup

в вашем foreach для массива тегов:

$tag_array = explode('|' , $row['tagGroup']);

foreach($tag_array as $tag) {
list($uid,$uname) = explode('~',$tag,2);

echo "<a href=\"profile.php?user_id=".$uid.">".$uname."</a>";
}

(обновлено, чтобы использовать комментарии @ Jakumi и другие примеры для ясности — обратите внимание, я использовал ‘|’ в качестве GROUP_CONCAT разделитель, поскольку экранирование символов для «\ n» здесь громоздко)

удачи!

2

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

Вам не нужно использовать GROUP_CONCAT для этого достаточно сделать обычный JOIN и использовать ORDER BY собрать все строки для одного и того же файла.

<?php
//Database Query
$sql="SELECT up.file,p.user_name,p.user_id, cp.user_name as liker_name, cp.user_idas liker_id
FROM tbl_uploads up
LEFT JOIN tbl_users p ON up.user_id = p.user_id
LEFT JOIN tbl_collab c ON up.file = c.file
LEFT JOIN tbl_users cp ON cp.user_id = c.collab_userid
ORDER BY up.file";$result = $mysqli->query($sql);
$last_file = null
while($row = $result->fetch_array())
{
$user_id = $row['user_id'];
$user = $row['user_name'];
$files = $row['file'];
$liker_id = $row['liker_id'];
$liker_name = $row['liker_name'];
if ($file != $last_file) {
$last_file = $file;
//File is displayed here
}
//Links to the users who liked the file
echo "<a href=\"profile.php?user_name=".$liker_id.">".$liker_name."</a>
}
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector