Как выбрать данные из таблицы таким образом, чтобы было, например, по 5 записей с одинаковой первой буквой? Есть три таблицы:
Цитата |
abc (chr_id, chr) values (1,а), (2,п)...(45, v) pages (page_id, name) values (1, Page_), ...(5656, Какая-то страница) abc_pages (row_id, chr_id, page_id) |
Цитата |
chr page_id coun_pages f 1 45 f 2 45 ........ e 989 12 e 990 12 |
SELECT chr.chr, pages.id
FROM pages, chr
JOIN (SELECT @a:=IF(@id!=idchr ,0,@a+1) AS a, @id:=idchr AS idchr, idpage
FROM abc_pages, (SELECT @a := 0, @id := 0) s1
ORDER BY idchr ASC) d ON a<4 AND d.idchr = chr.id AND d.idpage = pages.id
Цитата |
не нашел способа работающего быстрее чем тупо запросы в цикле |
Цитата |
благо букв в алфавите не так много, а вот китайцам печалька |
Цитата |
может наконец откроете "страшную тайну золотого ключика" и опишете ТЗ подробнее ? |
Цитата |
А (145) абрикос ананас Алень Б (2223) банан баран буратино etc. |
Цитата |
Кол-во записей для буквы хранить не получится т.к. нужен поиск по данным(кол-во результатов различное) |
Цитата |
подробнее про поиск |
d.a
SELECT d.a, c.cnt, chr.chr, pages.name
FROM pages, chr
JOIN (SELECT @a:=IF(@id!=idchr ,0,@a+1) AS a, @id:=idchr AS idchr, idpage
FROM pages, abc_pages, (SELECT @a := 0, @id := 0) s1 WHERE abc_pages.idpage = pages.id AND pages.name LIKE "%а%"
ORDER BY idchr ASC) d
JOIN (SELECT COUNT(chr.id) AS cnt, chr.id
FROM chr, pages, abc_pages
WHERE chr.id = abc_pages.idchr AND pages.id = abc_pages.`idpage` AND pages.name LIKE "%а%" GROUP BY chr.id) c
ON a<4 AND d.idchr = c.id AND d.idchr = chr.id AND d.idpage = pages.id