我有这样的事情:
(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.实现but..HOW?
“和”和“或”条件并不重要,它们正确工作,问题是在计算UNION`ed‘in查询时。第二个查询正确计数summ (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作为总是非常重要的!
发布于 2014-01-03 05:06:16
我看过了你的问题,我想你想从union条款中得到最高值,我不知道mySql,所以我用mySql解决了你的问题。
逻辑:-我使用了CTE,然后执行了UNION操作,然后从这两个操作中选择了最大值。
WITH COUNTT AS (SELECT 1 AS TEST
UNION
SELECT 5 AS TEST)
SELECT MAX(TEST) FROM COUNTT而且,代替硬编码的"1“和"5",你可以使用你的计数查询,我认为这是你想要的。请把它标记为答案。
https://stackoverflow.com/questions/11943748
复制相似问题