2015-05-17 48 views
3

从每组2行我有2个表,这种结构MySQL的选择由

产品

 
id  title 
----------------- 
1  sample 1 
2  sample 2 
3  sample 3 
4  sample 4 
5  sample 5 
6  sample 6 

画廊

 
id  typeid  name 
------------------------------- 

1   1   sample for 1 
2   1   sample for 1 
3   1   sample for 1 
4   2   sample for 2 
5   2   sample for 2 
7   2   sample for 2 
8   3   sample for 3 
9   3   sample for 3 
10   3   sample for 3 
11   4   sample for 4 
12   4   sample for 4 
13   5   sample for 5 
14   5   sample for 5 
 

和iwant这个id的列表例如(1,2,3)

 
id  typeid  name 
--------------------- 

1  1   sample for 1 
1  2   sample for 1 
2  4   sample for 2 
2  5   sample for 2 
3  8   sample for 3 
3  9   sample for 3 

这里是我的查询

 
select p.*,g.* from products p inner join gallery g ON p.id=g.typeid where p.id in (3,4,5) group by typeid 

这里是真正的结构sqlfiddle link

+0

在哪里查询?向我们展示你到目前为止所尝试过的? – Beginner

+0

我不明白你的例子。 'typeid = 2'与'sample for 1'有什么关系? – Barmar

+0

如何在此查询中使用“产品”表? – Barmar

回答

4
SELECT p.id, g.typeid, g.id, g.title 
FROM products p 
INNER JOIN (SELECT * FROM gallery a 
      WHERE (SELECT COUNT(*) FROM gallery b WHERE b.title = a.title AND b.id >= a.id) <= 2 
      ) g ON p.id = g.typeid 
WHERE p.id in (3,4,5) 

编辑:

试试这个SQL Fiddle Demo

SELECT p.id, g.typeid, g.id, g.name 
FROM products p 
INNER JOIN (SELECT * FROM gallery a 
      WHERE (SELECT COUNT(*) FROM gallery b WHERE b.typeid = a.typeid AND b.id >= a.id) <= 2 
      ) g ON p.id = g.typeid 
WHERE p.id in (3,4,5) order by g.id asc 

所以基本上这部分

WHERE (SELECT COUNT(*) FROM gallery b WHERE b.title = a.title AND b.id >= a.id) <= 2 

用于替换group by typeid

+0

亲爱的@RRayasa请检查这个链接http://sqlfiddle.com/#!9/9f8a2/5 –

+0

好吧,让我看看 – RRayasa

2
SELECT p.id,p.title, g.typeid, g.id, g.name 
FROM products p 
INNER JOIN (SELECT * FROM gallery a 
      WHERE (SELECT COUNT(*) FROM gallery b WHERE b.typeid = a.typeid AND b.id >= a.id)

请尽量将