在数据库中,表友谊有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语句?
答案 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}}。这可能就是为什么你会看到额外的用户。