使用MySQL中的不同视图从搜索和导出中获取相同的数据?

时间:2013-09-13 13:31:38

标签: mysql views

我在数据库中有两个表。一个表是主表,另一个表是子表。当用户进行搜索时,他们仅查询主表中的记录,然后单击加号时,它会搜索子记录。查询是这样的:

SELECT * FROM TableA
GROUP BY id
LIMIT 0,10;

如果用户选择适用于子表的搜索条件,我只会内联到子表(TableB),例如:

SELECT * FROM TableA a
INNER JOIN TableB b on b.MasterId = a.id
GROUP BY a.id 
LIMIT 0, 10;

以上一切正常,除非我必须导出,当用户导出时,它使用不同的数据视图,没有主级和子级,这是一个扁平的结果,所以例如,当我在搜索上执行LIMIT 0,10,它会返回10条主记录,但如果我有1条包含10条子记录的主记录,则导出将只返回包含主信息和子信息的10条记录,但它只会是搜索中的第一个主记录,它甚至可能不是相同的记录,因为我正在查询视图。导出查询可能是:

SELECT * FROM TableC
LIMIT 0,10;

TableC基本上是来自TableATableB的展平数据的视图,但由于它被展平,因此应用LIMIT并不适用。

有没有办法解决这个问题?任何解决方案?

1 个答案:

答案 0 :(得分:0)

使用limit时,您应该添加order by。 MySQL保证group by之后的排序。所以,尝试这样的事情:

SELECT *
FROM TableC
ORDER BY aid
LIMIT 0,10;

作为注释:这在MySQL中有效,因为group by之后的排序保证。这不是ANSI标准,不适用于其他数据库。