这感觉应该很容易,但我无法得到它,我试过了一切。MySQL:如何计算复杂查询返回的行数
我怎样才能只是获得了该查询返回的行数:
(SELECT Alias1 . *,
Alias2 . *
FROM Table1 AS Alias1
LEFT JOIN Table2 AS Alias2 USING (Col1)
WHERE Alias1.Col1 != 'blah1'
AND Alias1.Col2 LIKE 'blah2'
AND (Alias1.Col3 LIKE 'blah3'
OR Alias1.Col3 LIKE 'blah4')
AND Alias1.Col4 = 'blah5'
AND Alias2.Col7 LIKE 'blah6'
ORDER BY Alias1.Col6 DESC
LIMIT 50)
UNION
(SELECT Alias1 . *,
Alias2 . *
FROM Table1 AS Alias1
LEFT JOIN Table2 AS Alias2 USING (Col1)
WHERE Alias1.Col1 != 'blah1'
AND Alias1.Col2 LIKE 'blah2'
AND (Alias1.Col3 LIKE 'blah3'
OR Alias1.Col3 LIKE 'blah4')
AND Alias1.Col4 = 'blah5'
AND Alias2.Col5 LIKE 'blah6'
ORDER BY Alias1.Col6 DESC
LIMIT 50)
UNION
(SELECT Alias1 . *,
Alias2 . *
FROM Table1 AS Alias1
LEFT JOIN Table2 AS Alias2 USING (Col1)
WHERE Alias1.Col1 != 'blah1'
AND Alias1.Col2 LIKE 'blah2'
AND (Alias1.Col3 LIKE 'blah3'
OR Alias1.Col3 LIKE 'blah4')
AND Alias1.Col4 = 'blah5'
ORDER BY Alias1.Col6 DESC
LIMIT 50)
我想我可以只使用PHP来执行查询,然后做的结果mysql_num_rows
,但我想直接用SQL来完成它,因为我听说它更快,因为它节省了一个步骤。
谢谢!
编辑:
以下是给我的错误(#1060 - 重复列名 'Col1中'):
SELECT COUNT(*) FROM (
(SELECT Alias1 . *,
Alias2 . *
FROM Table1 AS Alias1
LEFT JOIN Table2 AS Alias2 USING (Col1)
WHERE Alias1.Col1 != 'blah1'
AND Alias1.Col2 LIKE 'blah2'
AND (Alias1.Col3 LIKE 'blah3'
OR Alias1.Col3 LIKE 'blah4')
AND Alias1.Col4 = 'blah5'
AND Alias2.Col7 LIKE 'blah6'
ORDER BY Alias1.Col6 DESC
LIMIT 50)
UNION
(SELECT Alias1 . *,
Alias2 . *
FROM Table1 AS Alias1
LEFT JOIN Table2 AS Alias2 USING (Col1)
WHERE Alias1.Col1 != 'blah1'
AND Alias1.Col2 LIKE 'blah2'
AND (Alias1.Col3 LIKE 'blah3'
OR Alias1.Col3 LIKE 'blah4')
AND Alias1.Col4 = 'blah5'
AND Alias2.Col5 LIKE 'blah6'
ORDER BY Alias1.Col6 DESC
LIMIT 50)
UNION
(SELECT Alias1 . *,
Alias2 . *
FROM Table1 AS Alias1
LEFT JOIN Table2 AS Alias2 USING (Col1)
WHERE Alias1.Col1 != 'blah1'
AND Alias1.Col2 LIKE 'blah2'
AND (Alias1.Col3 LIKE 'blah3'
OR Alias1.Col3 LIKE 'blah4')
AND Alias1.Col4 = 'blah5'
ORDER BY Alias1.Col6 DESC
LIMIT 50)
) a
以下是给我的错误(#1064 - 你有一个错误您的SQL语法):
SELECT COUNT(*) FROM (
(SELECT Alias1 . *,
Alias2 . *
FROM Table1 AS Alias1
LEFT JOIN Table2 AS Alias2 USING (Col1)
WHERE Alias1.Col1 != 'blah1'
AND Alias1.Col2 LIKE 'blah2'
AND (Alias1.Col3 LIKE 'blah3'
OR Alias1.Col3 LIKE 'blah4')
AND Alias1.Col4 = 'blah5'
AND Alias2.Col7 LIKE 'blah6'
ORDER BY Alias1.Col6 DESC
LIMIT 50) a
UNION
(SELECT Alias1 . *,
Alias2 . *
FROM Table1 AS Alias1
LEFT JOIN Table2 AS Alias2 USING (Col1)
WHERE Alias1.Col1 != 'blah1'
AND Alias1.Col2 LIKE 'blah2'
AND (Alias1.Col3 LIKE 'blah3'
OR Alias1.Col3 LIKE 'blah4')
AND Alias1.Col4 = 'blah5'
AND Alias2.Col5 LIKE 'blah6'
ORDER BY Alias1.Col6 DESC
LIMIT 50) b
UNION
(SELECT Alias1 . *,
Alias2 . *
FROM Table1 AS Alias1
LEFT JOIN Table2 AS Alias2 USING (Col1)
WHERE Alias1.Col1 != 'blah1'
AND Alias1.Col2 LIKE 'blah2'
AND (Alias1.Col3 LIKE 'blah3'
OR Alias1.Col3 LIKE 'blah4')
AND Alias1.Col4 = 'blah5'
ORDER BY Alias1.Col6 DESC
LIMIT 50) c
) z
为什么包装整个查询放在括号中(使它成为子查询)并对其执行SELECT COUNT(*)失败?它是否返回错误信息? – FrustratedWithFormsDesigner
当您将它包装在Select Count(*)FROM(您的长查询)AS CountThis中时会发生什么。你有没有得到一个特定的错误,或者你得到错误的计数? – Kibbee
你不提供一个不使用'mysql_num_rows()'的好理由。这是有原因的...使用它。你为什么期望它很慢? – Brad