私はこのようなものを持っています:
(SELECT COUNT(*) AS total FROM `transactions` WHERE
`asset`='u_{$user_id}' GROUP BY id)
UNION DISTINCT
(SELECT COUNT(*) AS total FROM transactions tr
INNER JOIN payments pa ON tr.asset = CONCAT('p_', pa.id)
WHERE pa.user_id = '{$user_id}'
GROUP BY tr.id)
それは与えます1
次のように動作します。
SELECT
(SELECT COUNT(*) FROM `transactions`
WHERE `asset`='u_{$user_id}')
+
(SELECT COUNT(*) FROM transactions tr
INNER JOIN payments pa ON tr.asset = CONCAT('p_', pa.id)
WHERE pa.user_id = '{$user_id}')
それは与えます6
しかし、私は取得する必要があります5
..、正しいクエリを作成する方法を教えてください。
確かに、私はこれを php で行うことができますが、..どのように SQL で..?
本当に "and" および "or" 条件は問題ではありません。それらは正しく機能します。問題は、UNION`ed クエリのカウントにあります。2 番目のクエリは合計 (1+5) を正しくカウントしますが、値はクエリと交差します。最初のものは、最初のサブクエリの結果を返します。だから、カウントする前に結果を一意にする必要があります...
PHP では、次のようになります。次のようなものを取得するために、ループ内で長いクエリを構築するよりも、支払いとの内部結合によってトランザクション ID リストを取得します。SELECT COUNT(*) FROM transactions WHERE (*what i have now* OR id=$id_1 OR id=$id_2 OR id=$id_3 etc..)
UPD: カット済み
解決しました!=)
SELECT COUNT(*) FROM(
SELECT tr.* FROM transactions tr
WHERE tr.asset='u_{$user_id}' OR (tr.liability='g' AND tr.l_info='{$user_name}')
UNION SELECT tr.* FROM transactions tr
INNER JOIN payments pa ON tr.asset = CONCAT('p_', pa.id)
WHERE pa.user_id = '{$user_id}' AND pa.status='100')
AS total
ASの合計が重要です!