繁体   English   中英

mysql select UNION 与 AND 问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM