Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите с запросом 
:(
    Опции темы
v2v
Дата 27.5.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



Цитата(DooZ @  27.5.2008,  22:01 Найти цитируемый пост)

и т .д.

Код

SELECT id FROM images GROUP BY url ORDER BY shows ASC

пробовал ?


--------------------
PM   Вверх
DooZ
Дата 27.5.2008, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



INSERT INTO `images` (`id`, `url`, `thumb`, `shows`) VALUES
(1, 'http://domain1.com', 'http://domain1.com/image1.jpg', '0'),
(2, 'http://domain1.com', 'http://domain1.com/image2.jpg', '0'),
(3, 'http://domain1.com', 'http://domain1.com/image3.jpg', '0'),
(4, 'http://domain2.com', 'http://domain2.com/image1.jpg', '0'),
(5, 'http://domain2.com', 'http://domain2.com/image2.jpg', '0'),
(6, 'http://domain2.com', 'http://domain2.com/image3.jpg', '0'),
(7, 'http://domain3.com', 'http://domain3.com/image1.jpg', '0'),
(8, 'http://domain3.com', 'http://domain3.com/image2.jpg', '0'),
(9, 'http://domain3.com', 'http://domain3.com/image3.jpg', '0'),

вот данные в таблице
может быть так будет более понятно

далее делаю запрос:
select id from images group by url order by shows
выдает 1, 4, 7

(кто-то может спросит почему нельзя сделать запрос просто: select id from images order by shows) отвечу:
мне надо уникальные урл (1 урл = 1 картинка)

итак после того как выдали ИД я увеличиваю их значения shows
update images set shows=shows+1 where id=1
update images set shows=shows+1 where id=4
update images set shows=shows+1 where id=7

и снова делаю запрос:
select id from images group by url order by shows
НО мне выдает 1, 4, 7
а надо что бы выдало что-то вроде: 2, 5, 8 т.е. те ИД у которых shows меньше

есть вопросы?

Добавлено через 1 минуту и 55 секунд
2v2v - почитай последнюю мессагу
я там подробно описал что нужно, может теперь объяснил как надо  smile

Добавлено через 3 минуты и 32 секунды
Цитата(Fortop @ 27.5.2008,  22:02)
Хотя можно попробовать реализовать что-то вроде

Код

SELECT id FROM images WHERE
shows IN (SELECT MAX(shows) FROM images GROUP BY url)

не катит, тоже самое выдает (если смотреть последний пример) то так же 1, 4, 7 вместо 2, 5, 8

Это сообщение отредактировал(а) DooZ - 27.5.2008, 22:13
PM MAIL   Вверх
Fortop
Дата 27.5.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 4
Всего: 42



Код

SELECT id FROM images WHERE
shows IN (SELECT DISTINCT MIN(shows) FROM images GROUP BY url)


Это сообщение отредактировал(а) Fortop - 27.5.2008, 22:17


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
DooZ
Дата 27.5.2008, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



Цитата(Fortop @ 27.5.2008,  22:16)
Код

SELECT id FROM images WHERE
shows IN (SELECT DISTINCT MIN(shows) FROM images GROUP BY url)

выдает
2, 3, 5, 6, 8, 9
а должно
2, 5, 8
т.к. 3, 6, 9 это дубликаты урла
PM MAIL   Вверх
Fortop
Дата 27.5.2008, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 4
Всего: 42



не понял дубликаты чего?
ну так и сделай еще один GROUP

Код

SELECT id FROM images WHERE
shows IN (SELECT DISTINCT MIN(shows) FROM images GROUP BY url)
GROUP BY url



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
DooZ
Дата 27.5.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



Цитата(Fortop @ 27.5.2008,  22:25)
не понял дубликаты чего?
ну так и сделай еще один GROUP

Код

SELECT id FROM images WHERE
shows IN (SELECT DISTINCT MIN(shows) FROM images GROUP BY url)
GROUP BY url

работает, ПОЧТИ верно
если обновлять все shows которые она вывела то будет выдавать как надо
НО если будет вот так как у меня сейчас:

1    http://domain1.com    http://domain1.com/image1.jpg 1
2    http://domain1.com    http://domain1.com/image2.jpg 1
3    http://domain1.com    http://domain1.com/image3.jpg 1
4    http://domain2.com    http://domain2.com/image1.jpg 1
5    http://domain2.com    http://domain2.com/image2.jpg 1
6    http://domain2.com    http://domain2.com/image3.jpg 1
7    http://domain3.com    http://domain3.com/image1.jpg 1
8    http://domain3.com    http://domain3.com/image2.jpg 1
9    http://domain3.com    http://domain3.com/image3.jpg 0
т.е. все кроме 9-го ИД имеют shows равный 1

при запросе вида:
SELECT id FROM images WHERE
shows IN (SELECT DISTINCT MIN(shows) FROM images GROUP BY url)
GROUP BY url
выдает
1, 4, 7
а должно поидее выдать
1, 4, 9 (так как ИД-9 имеет меньше shows чем 7)

есть идеи?

Добавлено через 1 минуту и 6 секунд
а вообще если кто-то действительно может помочь, то не поленитесь создайте табличку в мискуле как я вверху написал заполните ее и протестируйте

очень надо решить эту задачу...
PM MAIL   Вверх
Fortop
Дата 27.5.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 4
Всего: 42



Сделай отдельно на той таблице, что ты привел только что

Код

SELECT DISTINCT url, MIN(shows) FROM images GROUP BY url


и проверь, действительно ли у твоего
http://domain3.com есть 0 shows

Добавлено через 2 минуты и 25 секунд
А еще лучше вот так

Код

SELECT id FROM images
JOIN (SELECT DISTINCT url, MIN(shows) AS minshow FROM images GROUP BY url)  AS S
ON S.minshow = images.shows AND S.url = images.url



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
DooZ
Дата 27.5.2008, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



Цитата(Fortop @ 27.5.2008,  22:33)
Сделай отдельно на той таблице, что ты привел только что

Код

SELECT DISTINCT url, MIN(shows) FROM images GROUP BY url


и проверь, действительно ли у твоего
http://domain3.com есть 0 shows

Добавлено @ 22:35
А еще лучше вот так

Код

SELECT id FROM images
JOIN (SELECT DISTINCT url, MIN(shows) AS minshow FROM images GROUP BY url)  AS S
ON S.minshow = images.shows AND S.url = images.url

абсолютно точно ИД9 имеет shows = 0
я в таблице работаю и выдаю именно оттуда инфу

вот экспорт если есть сомнения (таблица вместо images, называется galleries, но это не имеет значние)

Код

CREATE TABLE IF NOT EXISTS `galleries` (
  `id` bigint(20) unsigned NOT NULL auto_increment,
  `url` varchar(255) NOT NULL,
  `thumb_url` varchar(255) NOT NULL,
  `shows` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

INSERT INTO `galleries` (`id`, `url`, `thumb_url`, `shows`) VALUES
(1, 'http://domain1.com', 'http://domain1.com/image1.jpg', 1),
(2, 'http://domain1.com', 'http://domain1.com/image2.jpg', 1),
(3, 'http://domain1.com', 'http://domain1.com/image3.jpg', 1),
(4, 'http://domain2.com', 'http://domain2.com/image1.jpg', 1),
(5, 'http://domain2.com', 'http://domain2.com/image2.jpg', 1),
(6, 'http://domain2.com', 'http://domain2.com/image3.jpg', 1),
(7, 'http://domain3.com', 'http://domain3.com/image1.jpg', 1),
(8, 'http://domain3.com', 'http://domain3.com/image2.jpg', 1),
(9, 'http://domain3.com', 'http://domain3.com/image3.jpg', 0);


Добавлено через 3 минуты и 8 секунд
на предположениях долго будем выяснять как сделать  smile 
надо тестить на таблице, последний пример:
SELECT id FROM galleries
JOIN (SELECT DISTINCT url, MIN(shows) AS minshow FROM galleries GROUP BY url)  AS S
ON S.minshow = galleries.shows AND S.url = galleries.url

выводит:
1, 2, 3, 4, 5, 6, 9
а надо просто:
1, 4, 9 в данном случае (т.к. у ИД9 shows = 0)
PM MAIL   Вверх
v2v
Дата 27.5.2008, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



Цитата(DooZ @  27.5.2008,  22:39 Найти цитируемый пост)
SELECT DISTINCT url, MIN(shows) AS minshow FROM images GROUP BY url

вот этот подзапрос вернёт не правильные url -ы 


--------------------
PM   Вверх
DooZ
Дата 27.5.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



Цитата(v2v @ 27.5.2008,  22:43)
Цитата(DooZ @  27.5.2008,  22:39 Найти цитируемый пост)
SELECT DISTINCT url, MIN(shows) AS minshow FROM images GROUP BY url

вот этот подзапрос вернёт не правильные url -ы

написал бы лучше как правильно сделать запрос...
PM MAIL   Вверх
Fortop
Дата 27.5.2008, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 4
Всего: 42



Код

SELECT id, S.url, S.minshow FROM galleries
JOIN (SELECT DISTINCT url, MIN(shows) AS minshow FROM galleries GROUP BY url)  AS S
ON S.minshow = galleries.shows AND S.url = galleries.url
GROUP BY url;


Добавлено через 1 минуту и 19 секунд
Цитата(v2v @  27.5.2008,  22:43 Найти цитируемый пост)
вот этот подзапрос вернёт не правильные url -ы

Что значит неправильные?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
v2v
Дата 27.5.2008, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



Цитата(Fortop @  27.5.2008,  22:49 Найти цитируемый пост)

Что значит неправильные? 

те которые первые в списке тоесть соответствуют ид 1,4,7 не смотря на то , что ты выбрал минимальное количество показов.


--------------------
PM   Вверх
DooZ
Дата 27.5.2008, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



Цитата(Fortop @ 27.5.2008,  22:49)
Код

SELECT id, S.url, S.minshow FROM galleries
JOIN (SELECT DISTINCT url, MIN(shows) AS minshow FROM galleries GROUP BY url)  AS S
ON S.minshow = galleries.shows AND S.url = galleries.url
GROUP BY url;


Добавлено @ 22:51
Цитата(v2v @  27.5.2008,  22:43 Найти цитируемый пост)
вот этот подзапрос вернёт не правильные url -ы

Что значит неправильные?

проверил, работает как надо
огромное спасибо за помощь smile
побольше бы таких профессиональных людей!!!

останется теперь протестировать при нагрузке скажем в 100к урл, но это уже позже  smile 
PM MAIL   Вверх
v2v
Дата 27.5.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



можно попробовать что то вроде
Код

SELECT * from images where shows not in (select max(shows) from images group by url) group by url



--------------------
PM   Вверх
Fortop
Дата 27.5.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 4
Всего: 42



Цитата(v2v @  27.5.2008,  22:52 Найти цитируемый пост)
те которые первые в списке тоесть соответствуют ид 1,4,7 не смотря на то , что ты выбрал минимальное количество показов. 

Он нам нужен только для того чтобы выбрать минимальное количество показов для конкретного урл.
Дальше мы его джойним с основной таблицей и группируем по урл.

Если будет несколько id  с минимальным значением - то серевер выберет первый попавшийся из данного урл.

Добавлено через 2 минуты
Цитата(v2v @  27.5.2008,  22:55 Найти цитируемый пост)
not in (select max(shows)..... 

ты просто реверсировал запрос
Цитата(Fortop @  27.5.2008,  22:16 Найти цитируемый пост)
IN (SELECT DISTINCT MIN(shows) 




--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0940 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.