我有表documents
:languages
和document_languages
。文档以一种或多种语言存在,这种关系映射到document_languages
.
想象一下,现在我想在一个页面上显示文档及其所有语言,并将结果集分页以在每页上显示 10 条记录。将有一个WHERE
声明,指定应检索哪些语言(例如:en、fr、it)。
即使我只想在页面上显示 10 个文档LIMIT 10
(
如何将WHERE
语句与LIMIT
单个查询结合起来以获取我需要的记录?
我有表documents
:languages
和document_languages
。文档以一种或多种语言存在,这种关系映射到document_languages
.
想象一下,现在我想在一个页面上显示文档及其所有语言,并将结果集分页以在每页上显示 10 条记录。将有一个WHERE
声明,指定应检索哪些语言(例如:en、fr、it)。
即使我只想在页面上显示 10 个文档LIMIT 10
(
如何将WHERE
语句与LIMIT
单个查询结合起来以获取我需要的记录?
使用子查询仅过滤文档记录
select * from
(select * from documents limit 0,10) as doc,
languages lan,
document_languages dl
where doc.docid = dl.docid
and lan.langid = dl.langid
检查子查询文档
http://dev.mysql.com/doc/refman/5.0/en/from-clause-subqueries.html http://dev.mysql.com/doc/refman/5.0/en/subqueries.html
嗯...所以,如果您发布查询(SQL 语句),可能更容易发现错误。您最外层的 LIMIT 语句应该“解决问题”。正如 Rakesh 所说,您可以使用子查询。但是,根据您的数据,您可能(可能)只想使用简单的 JOIN(例如 where a.id = b.id...)。
这在 MySQL 中应该相当简单。在不太可能的情况下,您正在做一些“花哨”的事情,您总是可以将数据集拉入变量中,以便由外部语言(例如 Python)解析。如果您实际上只是想限制屏幕输出(交互式会话),请查看“pager”命令(我喜欢“pager less;”)。
最后,使用 UNION 语句签出。我希望这里有一些有用的东西。祝你好运!
我创建了这些表:
create table documents (iddocument int, name varchar(30));
create table languages (idlang char(2), lang_name varchar(30));
create table document_languages (iddocument int, idlang char(2));
使用 GROUP_CONCAT 函数进行基本查询以获得语言结果的转置:
select d.iddocument, group_concat(dl.idlang)
from documents d, document_languages dl
where d.iddocument = dl.iddocument
group by d.iddocument;
最后使用 LIMIT 选项设置文档的数量:
select d.iddocument, group_concat(dl.idlang)
from documents d, document_languages dl
where d.iddocument = dl.iddocument
group by d.iddocument limit 10;
您可以在此处查看有关 GROUP_CONCAT 的更多信息:http: //dev.mysql.com/doc/refman/5.0/es/group-by-functions.html
您可以在每一行添加一个小计数器,计算您要返回的唯一文档的数量,然后只返回 10 个。您只需指定要从哪个 document_id 开始,然后它会返回下一个即将到来的 10 个。
SELECT document_id,
if (@storedDocumentId <> document_id,(@docNum:=@docNum+1),@docNum),
@storedDocumentId:=document_id
FROM document, document_languages,(SELECT @docNum:=0) AS document_count
where @docNum<10
and document_id>=1234
and document.id=document_languages.document_id
order by document_id;