2011-12-07 15 views
-3

私はフォーラムを持っていて、スレッドへの返信と各インスタンスについて、ユーザー情報のメンバーデータベースを照会しています。sqlのどのような種類

可能であれば、1つのクエリで実行したいと考えています。これにはどんな種類のSQL結合が必要ですか?

$sql_result = mysql_query("SELECT * FROM forum_replies WHERE topic='$topic_id' AND del=0 ORDER BY date asc", $db); 
while($rs = mysql_fetch_array($sql_result)) 
{ 
    $sql_result2 = mysql_query("SELECT * FROM members WHERE id='$rs[author]'", $db); 
    $rs2 = mysql_fetch_array($sql_result2); 

クエリ::

select * 
    from forum_replies as fr 
    left join mobsters as m on m.id = fr.author 
    where 
     fr.topic = :topic_id 
     and del = 0 
    order by fr.date asc 

は、あなたが回答してデータを選択したい:

SELECT * FROM forum_replies WHERE topic='$topic_id' AND del=0 ORDER BY date asc 
SELECT * FROM mobsters WHERE id='$rs[author]'" 
+2

まさにあなたが達成しようとしているの? –

+0

Mikeのコメントを拡大するには、あなたが期待しているものを出力する必要があります。 –

+1

私は[PHP Prepared Statements](http://php.net/manual/en/pdo.prepared-statements.php)を使用せずに[SQL Injection](http:// en。 wikipedia.org/wiki/SQL_injection)の脆弱性です。私はここに貼り付けられていないコードであなたの変数を消毒することを願っています。そうでない場合は、変数をサニタイズするのではなく、PDO Prepared Statementsを使用するコードを書き直すことを検討してください。 – sarnold

答えて

0

私はあなたがこのような何かを探しているを推測 は、ここに私の既存のコードですすべての行と一緒に著者の。 :topic_idはトピックID(PDOで使用されている表記で、mysql_機能の代わりに検索して使用する必要があります)の場所です。

私は重要な提案があります:select *の代わりに、本当に必要なものをテーブルから本当に戻したいものを指定する必要があります。例えば

select fr.id, fr.title, fr.date, m.id, m.nickname 
    ... 
0

これはあなたが始める必要があります。

SELECT * 
FROM forum_replies fp 
JOIN mobsters mb on mb.id = fp.author 
WHERE topic='$topic_id' AND del=0 ORDER BY date asc 

をそれは(多少英語で)言う

私のフォーラムからすべての列を与えるすべてと一緒にテーブルを返信しますidがforum_repliesテーブルのauthorフィールドと一致するmobstersテーブルのカラム。

0

あなたはforum_repliesから、あなたが左を行うだろうどのように多くのギャングに関係なく、すべてを取得しようとしている場合は

SELECT * FROM forum_replies LEFT JOIN mobsters on mobsters.id=forum_replies.author; 

に参加するあなたは、重複する列名を説明するために、あなたの選択修正したいと思うでしょう。

0

はこれを試してみてください:

SELECT * FROM forum_replies 
    LEFT JOIN mobsters ON mobsters.id = forum_replies.author 
    WHERE forum_replies.topic = :ID AND forum_replies.del = 0 
関連する問題