我有两个表,一个是“用户”和“更新”表。我想从表中获取这些值:
id,username - 来自“users”表 message,createdOn - 来自“更新”表
我需要为指定用户和用户的朋友获取这些值。我已经创建了一个包含所有朋友ID的数组,如下所示:
array(1,3,7,21,45);
我需要一个查询,它将选择与前一个数组匹配的所有更新。 “更新”表还有一个“uid”列,用于定义发布更新的用户。这就是我到目前为止所做的:
$updates = "SELECT users.id, users.username, updates.message, updates.createdOn FROM users, updates WHERE updates.uid = '". $_COOKIE['id'] ."' ". $friendsNews ." ORDER BY updates.createdOn DESC LIMIT 0, 10";
$updates = mysql_query( $updates );
这对我不起作用,我创建了一个foreach循环,它还创建了一个或语句,插入到查询“$ friendsNews”中,如下所示:
foreach( $myFriends as $fid ) {
$friendsNews .= " OR updates.uid = '". $fid ."'";
}
整个查询编译后,查询结果如下:
SELECT users.id, users.username, updates.message, updates.createdOn FROM users, updates WHERE updates.uid = '1' OR updates.uid = '2' OR updates.uid = '3' ORDER BY updates.createdOn DESC LIMIT 0, 10
如果有人可以提供帮助,我会非常感激,我对SQL连接语句不是很有经验。谢谢!
答案 0 :(得分:3)
尝试
$sql = "SELECT users.id, users.username, updates.message, updates.createdOn, ".
" updates.message, updates.createdOn ".
" FROM users ".
" INNER JOIN updates ON updates.uid = users.id ".
" WHERE ".
" updates.uid IN ( ".implode(', ', $myFriends)." )";
答案 1 :(得分:1)
我认为如果你想获取ids数组中指定的用户的所有更新,最简单的方法是使用sql JOIN
和IN
子句
select users.id, users.username, u1.message, u1.createdOn
from updates as u1
join users as u2 on u2.id = u1.uid
where u1.uid in(1,3,7,21,45)
order by u1.createdOn desc limit 0, 10;
答案 2 :(得分:1)
试试这个
if (in_array($_COOKIE['id'], $myFriends)) {
$flist = implode(',', $myFriends)
}else{
$flist = $_COOKIE['id'].','.implode(',', $myFriends); //if $_COOKIE['id'] is differed.....
}
$sql = "SELECT users.id, users.username, updates.message, updates.createdOn,
updates.message, updates.createdOn FROM users INNER JOIN updates
updates.uid = users.id WHERE updates.uid IN ( ".$flist." )";
记录用户的帮助有所不同.....