Автор Тема: Помогите родить запрос! плиз......  (Прочитано 6541 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Помогите родить запрос! плиз......
« : 15 Сентября 2005, 01:45:51 »
Здравствуйте !

Помогите родить запрос! плиз......

Есть таблица (fotki) с девушками =)) ... Соответственно, id девушки, имя файла фотки(foto) и дата закачки(date).

id    foto    date
25    1.jpg    2005-07-23 00:00:00
26    2.jpg    2005-09-14 06:43:58
30    3.jpg    2005-05-10 00:45:13
...    ...
...    ...
26    234.jpg    2005-05-07 00:45:13
25    323.jpg    2005-04-14 00:45:13


Т.е. в таблице у одной девушки (id) может быть куча фоток (foto) с соответствующей датой закачки.

Задача: Необходимо выбрать от каждой девушки по одной, самой свежей фотографии.

Желательно реализовать 1 запросом. Запрос для  MySQL 4.0

Заранее огромное спасибо за внимание и предложения.
 - On-line сервис.

Оффлайн for_i_0

  • $15 per hour
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 555
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.php.net/manual/en
Помогите родить запрос! плиз......
« Ответ #1 : 15 Сентября 2005, 08:39:32 »
ИМХО у тебя не правильная структура БД. Было бы правильнее разбить проект на две таблицы:

girl
PRIMARY(id(INT)) name(VARCHAR)

photo
PRIMARY(id(INT)) name(VARCHAR) datetime(DATETIME) band(int)

А вот и запрос.

SELECT girl.name AS gnamephoto.name AS pnamephoto.datetime
FROM 
`girl` , `photo
WHERE girl.id photo.band
GROUP BY gname
ORDER BY photo
.datetime DESC


[OFF]Удачи[/OFF]
« Последнее редактирование: 15 Сентября 2005, 09:57:08 от for_i_0 »
[off]Безработный[/off]

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Помогите родить запрос! плиз......
« Ответ #2 : 15 Сентября 2005, 10:55:39 »
for_i_0
не правильно, читай внимательно вопрос...
listopad
SELECT main.id, main.foto FROM fotki main, (SELECT DISTINCT id FROM fotki) AS tmp
WHERE tmp.id=main.id AND main.date=(SELECT MAX(date) FROM fotki WHERE id=tmp.id)
And no religion too...

Оффлайн for_i_0

  • $15 per hour
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 555
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.php.net/manual/en
Помогите родить запрос! плиз......
« Ответ #3 : 15 Сентября 2005, 12:02:33 »
Цитировать
commander:
не правильно, читай внимательно вопрос...


Внимательно читаю и обноруживаю что у него поле id повторяется.

Цитировать
listopad:
id foto date
25 1.jpg 2005-07-23 00:00:00
26 2.jpg 2005-09-14 06:43:58
30 3.jpg 2005-05-10 00:45:13
... ...
... ...
26 234.jpg 2005-05-07 00:45:13
25 323.jpg 2005-04-14 00:45:13


отсюдова вывод у него поле id не PRIMARY.
А это по моему уже противоречить всем правилам.

Так где я ошибся ? может подскажите ?
[off]Безработный[/off]

Оффлайн unclebob

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 96
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите родить запрос! плиз......
« Ответ #4 : 15 Сентября 2005, 13:20:24 »
Цитировать
for_i_0:
 отсюдова вывод у него поле id не PRIMARY

у него поле id тоже самое, что у тебя band, а PRIMARY вообще отсутствует, в данном случае он ему и не нужен.
запивайте пиво водкой, чтобы жизнь была короткой
запивайте водку пивом, чтобы стать большим красивым

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Помогите родить запрос! плиз......
« Ответ #5 : 15 Сентября 2005, 13:33:34 »
for_i_0
Цитировать
Так где я ошибся ? может подскажите ?

1. Запрос не правильно написан.
2. Прежде чем начать советовать переделывать структуру таблиц, сначала надо увидеть её полностью а не опираться на свои догадки...
And no religion too...

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Помогите родить запрос! плиз......
« Ответ #6 : 16 Сентября 2005, 15:14:28 »
listopad
SELECT main.id, main.foto FROM fotki main, (SELECT DISTINCT id FROM fotki) AS tmp
WHERE tmp.id=main.id AND main.date=(SELECT MAX(date) FROM fotki WHERE id=tmp.id)

... спасибо большое! Но mysql 4.0 не поддерживает вложенные запросы... или я ничего не понимаю??
 - On-line сервис.

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Помогите родить запрос! плиз......
« Ответ #7 : 16 Сентября 2005, 17:27:21 »
To All

Афигеть... вам бы космические корабли запускать...

SELECT id, file, MAX(date) FROM fotki GROUP BY id

;-)

P.S. Даже если foto будет выбираться не соответсвующее date, не проверял, то:

SELECT t2.id, t2.file, MAX(t1.date) FROM fotki AS t1, fotki AS t2 WHERE t1.date = t2.date GROUP BY t1.id

Можно в уловие дописать AND t1.id = t2.id, если вдруг есть одинаковые поля date

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Помогите родить запрос! плиз......
« Ответ #8 : 16 Сентября 2005, 19:10:06 »
Phoinix
... не работают твои запросы ! по дате не сортируют !
 - On-line сервис.

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Помогите родить запрос! плиз......
« Ответ #9 : 16 Сентября 2005, 19:15:19 »
Подскажите , плиз , кто-нибудь - когда убъется таблица созданная create temporary table ???
 - On-line сервис.

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Помогите родить запрос! плиз......
« Ответ #10 : 18 Сентября 2005, 11:29:08 »
listopad

Может все-таки вникнешь в смысл моего запроса и поймешь как сортировать по дате?

SELECT t2.id, t2.file, MAX(t1.date) AS date_max FROM fotki AS t1, fotki AS t2 WHERE t1.date = t2.date GROUP BY t1.id ORDER BY date_max

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Помогите родить запрос! плиз......
« Ответ #11 : 26 Сентября 2005, 13:04:44 »
Phoinix - Спасибо !
Да ! супер ! запрос твой работает ! просто действительно повторялись даты ... и все стало хорошо , когда добавил AND t1.id = t2.id ! но тут еще одна проблема... таблица также имеет поле mode cо значениями 0,1,2 - это признак промодерированности фотографии (1 - промодерированные)... Вот, надо также отобрать именно промодерированные! .. если добавляю еще AND t1.mode=\'1\' - то опять какой - бред получается ....
 - On-line сервис.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28