私は音楽のために「ソーシャルシェアリング」のようなことをしています。問題に遭遇しました。私の友人のテーブルは次のように構成されています複雑なMySQLクエリ?
| id | username | songname | songid | plus | minus |
----------------------------------------------------
|0001| username1| Songname | 000001 | 0001 | 00000 |
|0002| username3| Song2222 | 000002 | 0000 | 00001 |
をので、私は何をしようとしている、3人の友人どこのランダムなリストを取得することです:
| id | f1 | f2 | status |
----------------------------------------------
| 000001 | username1 |username2| 0 |
| 000002 | username4 |username7| 1 |
マイ料金表は次のように構成されていますステータスは1で、その後、プラスの値= 1のランダムな友人の最新レートごとにレート表を照会します。 'Recency'(あなたの場合)は、自動インクリメンタルであるIDに基づいています。
その部分は本当に難しいビットではありません。厳しいのは、ユーザがf1またはf2のいずれかにいる可能性があるため、クエリにORを含める必要があり、ユーザがf1にいる場合は対応するf2を取得する必要があり、逆も同様です。
次に、友だちでステータス= 1であることを確認してから、3人のランダムな友人による最新レートのクエリレートを確認します。そして、誰もがPHP/MySQLでこのようなスクリプト/クエリを記述する方法を知っているだろうならば、それらのデータビットをダウンロード
<a href="profile.php?u=username3">username 3</a> +1'd <a href="song.php?id=2">Song2222</a>
の下の例のように3つの文字列を書き、私は本当に感謝されると思います!ハハ
ありがとう! :)
編集3 * 応答を待っている間に、私は部分的に動作するこのコードを作成しました!
<? session_start();
$user = $_SESSION['username'];
mysql_connect("localhost", "xxxxx", "xxxx") or die(mysql_error());
mysql_select_db("xxxxxx") or die(mysql_error());
$q1data = mysql_query("SELECT * FROM friends WHERE (f1='$user') OR (f2='$user') AND status=1 ORDER BY RAND() LIMIT 1") ;
if(mysql_num_rows($q1data)===1)
{
$q1result = mysql_fetch_assoc($q1data);
$q1f1 = $q1result['f1'];
$q1f2 = $q1result['f2'];
if($q1f1==$user) {
$oq2un1 = $q1f2;
}
if($q1f2==$user) {
$oq2un1 = $q1f1;
}
}
$q2data = mysql_query("SELECT * FROM friends WHERE (f1='$user') OR (f2='$user') AND status=1 ORDER BY RAND() LIMIT 1") ;
if(mysql_num_rows($q2data)===1)
{
$q2result = mysql_fetch_assoc($q2data);
$q2f1 = $q2result['f1'];
$q2f2 = $q2result['f2'];
if($q2f1==$user) {
$oq2un2 = $q2f2;
}
if($q2f2==$user) {
$oq2un2 = $q2f1;
}
}
$q3data = mysql_query("SELECT * FROM friends WHERE (f1='$user') OR (f2='$user') AND status=1 ORDER BY RAND() LIMIT 1") ;
if(mysql_num_rows($q3data)===1)
{
$q3result = mysql_fetch_assoc($q3data);
$q3f1 = $q3result['f1'];
$q3f2 = $q3result['f2'];
if($q3f1==$user) {
$oq2un3 = $q3f2;
}
if($q3f2==$user) {
$oq2un3 = $q3f1;
}
}
/************************************* SECOND SET OF QUERIES ******************************************/
$q4data = mysql_query("SELECT * FROM rates WHERE username='$oq2un1' AND plus=1 ORDER BY id LIMIT 1");
if(mysql_num_rows($q4data)===1)
{
$q4result = mysql_fetch_assoc($q4data);
$finalusername1 = $q4result['username'];
$q4songid = $q4result['song_id'];
$q4songname = $q4result['songname'];
}
$q5data = mysql_query("SELECT * FROM rates WHERE username='$oq2un2' AND plus=1 ORDER BY id LIMIT 1");
if(mysql_num_rows($q5data)===1)
{
$q5result = mysql_fetch_assoc($q5data);
$finalusername2 = $q5result['username'];
$q5songid = $q5result['song_id'];
$q5songname = $q5result['songname'];
}
$q6data = mysql_query("SELECT * FROM rates WHERE username='$oq2un3' AND plus=1 ORDER BY id LIMIT 1");
if(mysql_num_rows($q6data)===1)
{
$q3result = mysql_fetch_assoc($q6data);
$finalusername3= $q6result['username'];
$q6songid = $q6result['song_id'];
$q6songname = $q6result['songname'];
}
$socialmuze_string1 = $finalusername1." recently <font color='#00FF00'>+1'd</font> <a href='song?id=".$q4songid."'>".$q4songname."</a><br>";
$socialmuze_string2 = $finalusername2." recently <font color='#00FF00'>+1'd</font> <a href='song?id=".$q5songid."'>".$q5songname."</a><br>";
$socialmuze_string3 = $finalusername3." recently <font color='#00FF00'>+1'd</font> <a href='song?id=".$q6songid."'>".$q6songname."</a><br>";
echo $finalusername1." ".$q4songname."<br>";
echo $finalusername2." ".$q5songname."<br>";
echo $finalusername3." ".$q6songname."<br>";
?>
こんにちは@Karan、これまでに試したことと失敗した方法を投稿してください。私たちは物事をSOから修正し、より良いプログラマになることを支援します。 – rajah9
よろしく! 私はそれほど多くを得ていません:S私は本当にこれの後に何をすべきか分かりません.S $ userはf1かf2です。編集*実際にはこれを質問 –
に編集します最終的な解決策にもかかわらず、ユーザーセッション変数から埋め込まれた文字列を使用して文字列を作成すると、SQLインジェクション攻撃に広がる可能性があります。 – DRapp