をデータベースに持っています。テーブルの友情にはid、username、friendusernameがあります。ユーザーが他のユーザーを友人として受け入れると、1行のレコードがテーブルに保存されます(2行ではありません)。mysqlはUN問題を持つAND問題
<?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
空の値を保持し、私は15人のユーザーを選択して、MySQLのコードを自分の写真を表示ランダムにしたいですか?
問題2: AND RAND()<(SELECT ((15/COUNT(*))*10) FROM friendship) ORDER BY RAND() LIMIT 15"
というステートメントは、テーブルからランダムに15レコードを選択することです。おそらく私はそれを両方のUNIONステートメントに書く必要があるでしょうか? (私は2回書く必要があるという意味です)。そうであれば、15レコードの代わりに30レコードが表示されます。私はそれぞれ8/Count LIMIT 8
になるはずですか?または、他の方法でAND文を重複させないようにする方法はありますか?
OPの場合、同じユーザーは 'username'または' friendusername'として 'friendship'に格納することができます。OPには' $ username2'の別の友人が含まれているので両方のサブセットからランダムな行を選択します。 。だから、UNION(あるいはむしろUNION ALL)が必要です。 –
はい、私は 'friendusername' OR 'username'(両方とも 'friendusername'だけでなく)を選択する必要があるため、UNIONが必要です。 – zac1987
@ zac1987、更新された回答を参照 – Dirk