mysql选择带有AND问题的UNION

时间:2011-07-02 23:04:19

标签: mysql

在数据库中,表友谊有id,username和friendusername。当用户接受其他用户作为朋友时,表中将保存1行记录(不是2行)。我想随机选择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"是从表中随机选择15条记录。据说我需要在两个UNION声明上写它吗? (意思是我需要写2次)。如果是这样,它将显示30条记录而不是15条记录。我应该更改每个变为8/Count LIMIT 8吗?或者有没有其他方法可以避免重复AND语句?

1 个答案:

答案 0 :(得分:0)

如果您只需要一个由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中选择所有内容。在您的SQL中,第一个SELECT将获取友谊表中的所有用户名,然后第二个SELECT将获得随机15,但UNION将从两个中的任何一个中选择SELECT如果是两个SELECT结果中的任何一个,则为{{1}}。这可能就是为什么你会看到额外的用户。