【发布时间】:2011-08-22 14:06:49
【问题描述】:
这感觉应该很简单,但我就是搞不定,我什么都试过了。
我如何仅获取此查询返回的 NUMBER OF ROWS:
(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 - Duplicate column name '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(*) 无法正常工作?它是否返回错误消息?
-
当你将它包装在 Select Count(*) FROM(Your Long query) AS CountThis 中会发生什么。你得到一个特定的错误,还是你得到错误的计数?
-
您没有提供不使用
mysql_num_rows()的充分理由。它的存在是有原因的……使用它。为什么你认为它会很慢? -
我尝试使用
Select Count(*) from query,它工作得非常好。您能否发布您确切尝试执行的内容以及使用 count 时遇到的错误? -
@reggie:“内部子查询”是什么意思?是的,我重复了这个问题并使其更具体,因为没有人能够回答它,而一个特别的答案是得到了支持,即使它不起作用。