Используя две таблицы. Что я здесь не так делаю?
Я хочу создать систему каналов активности, и мои каналы (статусы) и друзья находятся в разных таблицах в моей базе данных. Как мне их подключить, чтобы вошедший в систему пользователь мог получать фиды только от своих друзей.
<?php
$sql = "
SELECT * FROM status WHERE author='(friend of logged-in user)' AND type='a'
**UNION**
SELECT * FROM friends WHERE user1='$user' AND accepted='1' OR user2='$user' AND accepted='1'
";
$query = mysqli_query($database, $sql);
$statusnumrows = mysqli_num_rows($query);
while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {
$user1 = $row["user1"];
$user2 = $row["user2"];
$accepted = $row["accepted"];
$statusid = $row["id"];
$account_name = $row["account_name"];
$author = $row["author"];
$postdate = $row["postdate"];
$postdate = strftime("%b %d, %Y %I:%M %p");
$data = $row["data"];
$data = nl2br($data);
$data = str_replace("&","&",$data);
$data = stripslashes($data);
$statusDeleteButton = '';
if($author == $log_username || $account_name == $log_username ){
$statusDeleteButton = '<span id="sdb_'.$statusid.'"><a href="#" onclick="return false;" onmousedown="deleteStatus(\''.$statusid.'\',\'status_'.$statusid.'\');" title="DELETE THIS STATUS AND ITS REPLIES">delete status</a></span> ';
}
$feedlist .= '<div id="status_'.$statusid.'" class="flipwrapper pin">
<div class="picture">
<header class="img-btm">
'.$postdate.'</b><br />
20 <a href="#">cmts</a> 255 <a href="#">likes</a> '.$statusDeleteButton.'
</header>
<a href="status_frame.php?id='.$statusid.'"><img id="bound" src="'.$data.'"/></a></div></div>';
}
?>
1 ответ
Решение
Вы определенно не хотите UNION здесь, но подзапрос, более или менее такой:
SELECT * FROM status
WHERE author in (
SELECT whateverfieldshouldmapfromfriendstoauthor FROM friends
WHERE user1='$user' AND accepted='1' OR user2='$user' AND accepted='1'
) AND type='a'
И несколько общих советов:
- Разработка ваших запросов прямо на вашем языке сценариев (в данном случае php) - очень плохая идея. Используйте инструмент, который позволяет разрабатывать запросы, запускать их и проверять наборы результатов. Есть множество таких, как MySQL's Workbench и Squirrel SQL.
- будьте очень осторожны с проблемами внедрения SQL (если ваш
$user
переменная предоставляется по запросу, вы). Лучший способ избежать проблем с внедрением SQL - это использование параметризованных запросов.