У меня есть веб-страница с фотографиями ($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>
}
}
в вашем 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» здесь громоздко)
удачи!
Вам не нужно использовать 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>
}