MySQL - 按表字符串排序和限制

时间:2011-01-15 21:15:57

标签: php mysql

我有两个mysql表。一个带字符串的表,例如abc,def,ghi,jkl。另一个表包含有关其他表中字符串的信息,例如“字母表中的三个首字母”,“字母表中的3-6个字母”,依此类推。此表中的每个字符串可以有多个(大约25行)。

我想从第二个表中为第一个字符串中的每个字符串返回3行,例如:

table1.string | table2.info
---------------------------
abc           | blahblah
abc           | blahblah2
def           | blahblah
abc           | blahblah3
def           | blahblah2
def           | blahblah3

我可以先从table1获取字符串,然后执行foreach并执行更多查询以从table2获取限制3。但这对表现来说似乎并不好。

这样的查询怎么样?

2 个答案:

答案 0 :(得分:0)

我不知道它是否适用于MySQL,但在MSSQL中这将是

SELECT
    table1.string,
    table2.info
FROM table1 INNER JOIN table2 ON table2.stringID = table1.ID
WHERE ROW_NUMBER() OVER (PARTITION BY table1.string ORDER BY table2.info) <= 3

答案 1 :(得分:0)

你可以试试这个(虽然它不是很快):

SELECT string,info FROM
(
  select t1.string, t2.info, 
  @n_rec := IF(@tmp!=t1.string,1,@n_rec+1) as nrec, 
  @tmp := t1.string
  FROM 
  table_1 t1
  INNER JOIN  table_2 t2 ON t2.table_1_id = t1.id 
  order by t1.string
 )yy
 INNER JOIN (SELECT @n_rec := 0) X
 INNER JOIN (SELECT @tmp:= null)Y  
 WHERE nrec <=3;

如果您需要在table_1中包含记录而在table_2中没有信息,则可能需要使用LEFT JOIN table_2而不是INNER JOIN table_2