[英]mysql select UNION with AND problem
在数据库中,表friendship 有id、username 和friendusername。 当用户接受其他用户为好友时,表中将保存 1 行记录(不是 2 行)。 我想随机 select 15 个用户并显示他们的图片,mysql 代码:
<?php
$query120 = "SELECT frenusername FROM friendship WHERE username='{$username2}' UNION SELECT username FROM friendship WHERE friendusername='{$username2}' AND RAND()<(SELECT ((15/COUNT(*))*10) FROM friendship) ORDER BY RAND() LIMIT 15";
$result120 = mysql_query($query120,$connection) or die (mysql_error());
confirm_query($result120);
while($userinfo120 = mysql_fetch_array($result120)){
$frenusername= $userinfo120['frenusername'];
$username = $userinfo120['username']; //this hold empty value, why?
$query121 = "SELECT picturemedium FROM users WHERE username='{$frenusername} OR username='{$username}' LIMIT 1";
//display picture
}
}
?>
我的问题 1:为什么$username
保持空值?
我的问题2:语句AND RAND()<(SELECT ((15/COUNT(*))*10) FROM friendship) ORDER BY RAND() LIMIT 15"
是从表中随机 select 15 条记录。据说我需要把它写在两个 UNION 语句上对吗?(意思是我需要写 2 次)。如果是这样,它将显示 30 条记录而不是 15 条记录。我应该将它改为8/Count LIMIT 8
吗?或者有没有其他方式避免重复 AND 语句?
如果您只需要username2
的 15 个朋友的随机集合,那么您不需要UNION
:
(SELECT username
FROM friendship
WHERE (friendusername='{$username2}' OR
username='{$username2}') AND
RAND()<(SELECT ((15/COUNT(*))*10) FROM friendship)
ORDER BY RAND()
LIMIT 15)
UNION将 select 来自SELECT
的所有内容。 In your SQL, the first SELECT
would get ALL of the usernames in the friendship table, then the second SELECT
would get the random 15, but the UNION
would select from either of the two SELECT
sa record if it was in either of the two SELECT
结果。 这可能就是您看到额外用户的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.