2011-07-23 4 views
0

私は2つのテーブルです持っているもの:別のテーブル内のオプションに応じて、行数の合計に対するSQLクエリとヘルプ

mark_notifications

mark_notifications_options

mark_notificationsテーブル列を含むデータの行を含むtidおよびユーザーID

mark_notifications_optionsテーブルには、特別な列grouptogetherが含まれてい

私は何を達成しようとしていますが、ユーザーIDのmark_notifications_options.grouptogether値が0に設定されている場合、それは彼のユーザIDと一致するすべての行を追加することですユーザーIDのmark_notifications_options.grouptogether値が1に設定されている場合mark_notificationsテーブル

しかし、それは、すべてのTIDSがグループ化されている彼のユーザーIDに一致するすべての行を追加しますので、どんなにそこにあれば何回同じtid値が上がり、私はまた、時間tid = 0を別々のentitiy(しかし、グループ化されていない)として数えたいと思います。そして、私はちょうどPHPで後で値を追加します。

これは私が今までに思い付いたことですが、結果の値は何の意味もありません。何千もの結果を得ています(例えば8のように低い数値でなければなりません)。

SELECT 
     mark_notifications_options.grouptogether, 
     COUNT(mark_notifications.threadid) AS ungrouped, 
     SUM(mark_notifications.threadid = 0) AS total_zero, 
     COUNT(DISTINCT mark_notifications.threadid) AS grouped 
    FROM mark_notifications, mark_notifications_options 
    WHERE mark_notifications.userid = $userid 
GROUP BY mark_notifications_options.grouptogether 

ありがとうございます!

+0

は、あなたのコード内grouptogetehrオプションをチェックして、それの値に応じて異なる実行するためのオプション、およびまっすぐ進む、クエリことではありません? – Eddy

答えて

0

結合述語が欠落していたため、デカルト積が得られました(つまり、n×n行になりました)。
このお試しください:代わりに2つの異なることをやって、いくつかの恐ろしいクエリを作成する

SELECT 
     mark_notifications_options.grouptogether, 
     COUNT(mark_notifications.threadid) AS ungrouped, 
     SUM(mark_notifications.threadid = 0) AS total_zero, 
     COUNT(DISTINCT mark_notifications.threadid) AS grouped 
    FROM mark_notifications mark_notifications 
    LEFT JOIN mark_notifications_options mark_notifications_options on mark_notifications_options.userid = mark_notifications.userid 
    WHERE mark_notifications.userid = $userid 
GROUP BY mark_notifications_options.grouptogether 
関連する問題