繁体   English   中英

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

[英]MySQL - Sort and limit by table string

我有两个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。 但这似乎对性能没有好处。

这样的查询看起来如何?

我不知道它是否适用于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

您可以尝试一下(虽然速度不是很快):

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 table_2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM