Помогите с запросом

Balkon

Новичок
Помогите с запросом

Есть 2 таблицы:
- таблица категорий
- таблица товаров

Каким оптимальным запросом можно получить по 2 последних (по дате) товара из каждой категории?

структура такая:
catrories (catid, catname)
products (pid, catid, dateof, ....)
 

Гриша К.

Новичок
Предполагаю, что нужно следующее:
MAX(dateof)
GROUP BY catid

# Извените, неправильно прочитал вопрос, сначала понял извлеч последнюю дату для категории.
 

Wicked

Новичок
Balkon
добавить еще одно поле продуктам - номер продукта в категории с конца (напр. `back_order`), и следить за его целостностью. Т.е.: при добавлении ногового продукта в категорию, делать апдейт back_order = back_order + 1 where category_id = $category_id. При удалении - апдейт back_order = back_order - 1 where category_id = $category_id and back_order > $back_order_deleted. И т.д.

Геморройно довольно, но это даст тебе возможность делать выборку а-ля select * from products where back_order in (0, 1).
 

Balkon

Новичок
так а разве я не могу отсортировать продукты по dateof DESC LIMIT 2?

Сейчас сделано так:
1ый запос - получает все id категорий
в цикле по этим id запрашиваем по 2 последних продукта
select * from products where catid=$id order by dateof desc limit 2

Категорий немного (около 10), так что получается около 11 маленьких запросов.

Вот я и думаю - оставить так - или есть более рациональное решение
 

Wicked

Новичок
ну если тебя это устраивает, то не вижу никаких проблем.
 

Almazzz

Новичок
Нужен запрос mysqldump на бэкап базы данных. И популярно объяснить что там что!. А то я со своим уровнем знаний вообще не могу расчехлится!
 

zerkms

TDD infected
Команда форума
если очень хочется - то можно уложиться и в один запрос - сделать чтото типа

[sql]
SET @A = 0;
SELECT MAX(`id`), CONCAT(`field`, (@A := @A+1)%2) AS `unique` FROM `t` GROUP BY `unique`;
[/sql]

так ты получишь по 2 последних id из каждой категории. к результату этого запроса в виде подзапроса можно прибить эту же таблицу и получить найденные записи полностью
 

Almazzz

Новичок
Автор оригинала: alpine
Almazzz
Может тогда лучше не стоит?

-~{}~ 16.10.06 17:37:

Вот почитай:
http://phpclub.ru/mysql/doc/mysqldump.html
Не стоит что-то делать только тогда, когда это чем-то грозит.
Если не сделать это сейчас, то что вообще можно будет сделать в дальнейшем?
 

chira

Новичок
c 16.10 обсуждение куда-то не в ту сторону пошло или не удачный update сделали на форуме ...
по теме ...
Balkon
Категорий немного (около 10), так что получается около 11 маленьких запросов.
вместо 11 можно сделать 3 запроса
Код:
--1
CREATE TEMPORARY TABLE tt AS
SELECT catid, MAX(dateof) AS dateof
FROM products
GROUP BY catid
--2
INSERT INTO tt 
SELECT p.catid, MAX(p.dateof) AS dateof
FROM products p
  ,tt
WHERE p.catid = tt.catid AND p.dateof < tt.dateof
GROUP BY p.catid
--3
SELECT p.*
FROM products p, tt
WHERE p.catid = tt.catid AND p.dateof = tt.dateof
дальше настраивать производительность ...
 

alpine

Новичок
Almazzz
Грозит тем, что тебе придется поднапрячся и самостоятельно разобраться с тем, как использовать mysqldump, прочитав приведенную выше ссылку на русском языке.
 

Almazzz

Новичок
Автор оригинала: alpine
Almazzz
Грозит тем, что тебе придется поднапрячся и самостоятельно разобраться с тем, как использовать mysqldump, прочитав приведенную выше ссылку на русском языке.
Как говорит наш прыщ-президент: Друже мій, я понял уже давно, что чужими руками жара много не загребёш. А ещё я только-что выкупил, что в денвере этого самого mysqldump вообще нет! :)
И такой вопрос: что нужно сделать чтоб получить архив в gzip?
 

Almazzz

Новичок
Автор оригинала: alpine
Almazzz
Воспользоваться архиватором? :D
А вам уважаемый, я как посмотрю, только бы посмеятся с деревянных!:mad: Нехорошо!
Я имею ввиду что-бы при создании дампа он автоматически архивировался.
 

Almazzz

Новичок
Это я уже глядел давно и может и хотел бы, но мне нужно чтоб дамп делался регулярно через cron, а sypex в наличной версии этого не поддерживает!
 

Almazzz

Новичок
Спасибо братан, ты МОЩНЫЙ человек! Извини за напряг, просто на англ чехлится тяжело!
Все работает, дамп делает, только вот куда?
На запрос вида: Z:\>usr\local\mysql4\binmysqldump ---user admin --password=password mydatabase > dump.sql
просто перебрасывает на Z:\>
и так с любым заданым путём! Дамп делает только по запросу
Z:\>usr\local\mysql4\binmysqldump ---user admin --password=password mydatabase
:confused:

-~{}~ 17.10.06 18:00:

И ещё: Как я понимаю после прочитаных материалов на http://www.sitepoint.com/article/backing-up-mysqldump/2, если у моего хостера есть строка юникс то по запросу mysqldump ---user admin --password=password mydatabase |
gzip > /usr/local/mydatabase.gz должен осуществлятся дамп моей БД с расширением gz. Так ли это?
 
Сверху