2012-03-02 22 views
0

私はMySQLの初心者です。私はこれを試して解決するために多くの読書をしましたが、何らかの理由でそれを動作させることができませんでした。あなたのいずれかが一目で何を支援することができますうまくいけば結合テーブルに行が存在するかどうかをチェックする方法 -

、私はコメントのリストを選択するクエリを持って

非常に簡単でなければなりません。

$commentquery = "select projects_comments.*, users.user_url, users.display_name 
from ".$wpdb->prefix."projects_comments projects_comments 
left join ".$wpdb->prefix."users users on 
users.ID=projects_comments.userid   
where projectid = '$projectid' 
order by projects_comments.commentid desc"; 

ユーザーことができます「のように/愛」これらのコメント(Facebookのだと思います)

私がログインしているユーザーは、各コメントは、このクエリから返さ愛さ/言っていたかどうかをチェックできるようにしたいと思います。

第3のテーブル(上記のクエリには表示されていない 'comment_loves')にはcommentid、userid、posttimeが含まれており、ログインしたユーザーIDには変数$ useridでアクセスできます。この3番目のテーブルは、返されたクエリの行ごとにチェックする必要があります。

基本的に私はこのクエリに以下の機能を追加する必要があり、要約すると:各返された行の

を、".$wpdb->prefix." comments_lovesテーブルは、行の行のWHERE userid = $userid AND commentid = commentidの有無をチェックする必要があります。存在する場合は、 'true'または '1'をlovesという別の列に返します。

これは十分明確であり、これがあなたの多くにとっては簡単な質問であれば謝りたいと思います。私の試みにもかかわらず、私はこの仕事をすることができませんでした。

はあなたに、このような

$DBresult = mysql_query($yourQuery, $dbLink); 
$rowCount = mysql_num_rows($DBresult); 

if($rowCount > 0) 
{ 
    //do stuff 
} 
+0

などの外あなたの愛のテーブルに参加

何かが 'php'タグを追加しましたです。 –

答えて

2

としてはmysql_num_rowsを使用して返された行数は今テストすることはできませんが、このような何かが動作するはずのため

+0

Joachim、ありがとうございました。私はTonyの質問を最初に試してみましたが、今もあなたのことを試してみました。 IS NOT NULLを使用するあなたの方法はTonyの方法より速いでしょうか?もしそうなら、私はあなたの方法で行くでしょう。ありがとうございました – gordyr

+0

私は正しいものとしてあなたの答えを書き留めました。なぜなら、Tonyがほとんど機能していたとしても、それを動作させるために修正しなければならなかったからです。あなたの答えに必要な唯一の変更は、comments_lovesがcomment_lovesだったはずのテーブル名でした。それを除いて、それはすぐに働いた。 – gordyr

+0

@ gordyr一度クエリを変更すると最終結果が得られるとは思いますが、同じクエリを使用する場合は、MySQLのショートカットを使用してCASEを避けるだけです。 –

0

チェックをありがとう。あなたの状態をチェックする別の左の結合を加えました。

SELECT projects_comments.*, 
     users.user_url, 
     users.display_name, 
     comments_loves.userid IS NOT NULL AS loves 
FROM projects_comments projects_comments 
LEFT JOIN users users 
    ON users.ID=projects_comments.userid 
LEFT JOIN comments_loves 
    ON projects_comments.commentid = comments_loves.commentid AND 
    comments_loves.userid = '$userid' 
WHERE projectid = '$projectid' 
ORDER BY projects_comments.commentid DESC 
+0

提案に感謝しますが、これがどのように役立つのか分かりません。確かにこれは、最初のクエリの行数をチェックするだけです。実際に返された各commentid /行に対して$ useridにマッチする '3番目のテーブル'の行数をチェックしたいとします。または私は何かを誤解していますか? – gordyr

1

それはちょうど

select projects_comments.*, users.user_url, users.display_name, 
case when comment_loves.commentid is null then 0 else 1 end as loves 
from ".$wpdb->prefix."projects_comments projects_comments 
left join ".$wpdb->prefix."users users on users.ID=projects_comments.userid 
outer join ".$wpdb->prefix."comment_loves 
on comment_loves.commentid = projects_comments.commentid 
and comment_loves.userid = projects_comments.userid 
where projectid = '$projectid' 
order by projects_comments.commentid desc 
+0

ありがとうトニー、私は仕事をするための質問を持っていますが、外部結合ではなく、左結合を使用しなければなりませんでした。また、新しいjoinの 'and'部分はprojects_comments.useridではなく$ useridをチェックする必要がありました。外部結合を使用すると、NULL結果が戻されました。それにもかかわらず、それは私の問題をとても大きな感謝を解決する! – gordyr

+0

正しい答えでヨアヒムに言い聞かせることについての謝罪トニー。彼の質問は箱からすぐに働きましたが、あなたはいくつかの修正が必要でした。ご理解頂けるとありがたいです。しかし、助けてくれてありがとう。 :) – gordyr

+0

正しいです。 Guyは私よりも少しだけ知っているようだが、Select節でnullのトリックではないとは決して見えなかった。だからあなたは私に何か教えてもらえませんか? –

関連する問題