2015-05-18 18 views
6

Ben ve bu ben bu sorgu her kategori için 10 içerik getirme üzerine sınırını uygulamak istediğiniz benim sorguMySQL sorgusunda tabloya katılmak için bir limit nasıl uygulanır?

SELECT * FROM categories ca 
LEFT JOIN content co ON co.cat_id=ca.id 

iki tablo adında kategori ve içeriği (her kategori birçok içeriğe sahip olabilir) 'dir var.

Bunun için nasıl sorgulamalıyım?

cevap

3

MySQL'de rank işlevi yok.

Değişkenler kullanmalısınız. Senin için this snipped yazdım. Kendi şemaya bunu Transpoze:

MySQL 5.6 Şema Kur:

--c are categories 
create table c (id int, n varchar(100)); 

--p are contents 
create table p (id int, fk_c int, n varchar(100)); 

insert into c values 
(1, 'A'), 
(2, 'B'); 

insert into p values 
(1,1,'a'), 
(2,1,'b'), 
(3,1,'d'),       <-- id=3, over the limit set to 2 
(4,2,'e'); 

Sorgu:

select * from (
    SELECT p.*, 
     @n := (case when @c <> c.id then 1 else @n+1 end) as "num", 
     @c := c.id as "prev c" 
    FROM c left outer join p on c.id = p.fk_c, 
    (SELECT @n := 0, @c = 0) r 
) p 
    where p.num <= 2    <-- limiting to 2. 

Sonuçlar: için

| id | fk_c | n | num | prev c | 
|----|------|---|-----|--------| 
| 1 | 1 | a | 1 |  1 | 
| 2 | 1 | b | 2 |  1 | 
            <-- id=3 missing ;) 
| 4 | 2 | e | 1 |  2 | 
+0

teşekkürler senin cevabın, sqlfiddle içinde iyi çalışır ama phpmyadmin sorgumda sadece 2 satır döndürür - ama demek 0 - 2 satırları göster (3 toplam, Query 0.0020 saniye sürdü) - herhangi bir fikir? – mmjj

+0

Veriler, kategoriye ve içeriğe göre sıralanmalıdır. "Order by" maddesini eklemeyi deneyin. – danihp

+0

@mmjj, sipariş ver, iç içe geçmiş sorguya 'order by' ekleme:' ... @n: = 0, @c = 0) r order by c.id, p.id ) p .... Bu, sorununuzu çözüyor mu? İlk yorumda – danihp

İlgili konular