Я пишу скрипт, который будет перечислять 25 элементов всех 12 категорий. Структура базы данных такая:
tbl_items
---------------------------------------------
item_id | item_name | item_value | timestamp
---------------------------------------------
tbl_categories
-----------------------------
cat_id | item_id | timestamp
-----------------------------
В таблице tbl_items
около 600 000 строк. Я использую этот SQL-запрос:
SELECT e.item_id, e.item_value
FROM tbl_items AS e
JOIN tbl_categories AS cat WHERE e.item_id = cat.item_id AND cat.cat_id = 6001
LIMIT 25
Используя тот же запрос в цикле для cat_id
от 6000 до 6012. Но мне нужны последние записи каждой категории. Если я использую что-то вроде:
SELECT e.item_id, e.item_value
FROM tbl_items AS e
JOIN tbl_categories AS cat WHERE e.item_id = cat.item_id AND cat.cat_id = 6001
ORDER BY e.timestamp
LIMIT 25
... запрос обрабатывается примерно 10 минут, что неприемлемо. Могу ли я использовать LIMIT
более красиво, чтобы получить последние 25 записей для каждой категории?
Может ли кто-нибудь помочь мне добиться этого без ORDER BY
? Любые идеи или помощь будут высоко оценены.
ИЗМЕНИТЬ
tbl_items
+---------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+-------+
| item_id | int(11) | NO | PRI | 0 | |
| item_name | longtext | YES | | NULL | |
| item_value | longtext | YES | | NULL | |
| timestamp | datetime | YES | | NULL | |
+---------------------+--------------+------+-----+---------+-------+
tbl_categories
+----------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------+------+-----+---------+-------+
| cat_id | int(11) | NO | PRI | 0 | |
| item_id | int(11) | NO | PRI | 0 | |
| timestamp | datetime | YES | | NULL | |
+----------------+------------+------+-----+---------+-------+