Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Есть база данных (хит-парад):
id | name | date | pos
1 | song1 | 22.08.2010 | 1
1 | song1 | 29.08.2010 | 2
1 | song1 | 05.09.2010 | 3
2 | song2 | 22.08.2010 | 2
2 | song2 | 29.08.2010 | 3
2 | song2 | 05.09.2010 | 1
3 | song3 | 22.08.2010 | 3
3 | song3 | 29.08.2010 | 1
4 | song4 | 05.09.2010 | 2
на сайте будет таблица, показывающая результаты от 5 сентября, которая будет сортироваться по pos, в котором впервые появляется song4 и исчезает song3:
pos | name | предыдущая позиция| лучшая позиция| количество недель
1 song2 | pos от 29.08.2010 | X | Y
2 song4 | pos от 29.08.2010 | X | Y
3 song1 | pos от 29.08.2010 | X | Y
x - минимальное значение для всех записей name в поле pos (минимальное значение в поле pos для каждой песни).
y - количество каждой из записей в поле name (song1, song2, song4). то есть на сайте должно быть 3,3 и 1.
pos от 29.08.2010 для song4 ничего не покажет, т.к. song4 не имеет значения даты 29.08.2010.
В связи с этим три вопроса:
1) как сделать столбец с лучшей позицией (минимальное значение поля pos для каждой name)?
2) как сделать столбец с количеством недель (количество одинаковых записей в поле name)?
3) как сделать столбец с предыдущей позицией (значение pos для name от даты 29.08.2010)? и если позиции от 29.08.2010 нет, то как сделать так, чтобы было написано N?
помогите, пожалуйста, уже много сайтов излазил и разных статей прочитал, но ничего не получается.
Неактивен
В любом случае прийдется делать подзапросами.
1. SELECT MIN(pos) FROM tablename WHERE name = 'song1';
2. SELECT COUNT(*) FROM tablename WHERE name = 'song1' AND pos = 1;
3. SELECT pos FROM tablename WHERE name = 'song1' AND date = '2010-08-29';
Если данных нет — то нарисуйте там фигу
Неактивен
а вот это уже хуже
Но мой друг-программист говорит, что так сделать можно, но как именно, он не знает, потому что с MySQL не работал. как создавать базы данных, знает, а вот с кодами, как и у меня, проблема!
Отредактированно asprod (13.09.2010 21:22:30)
Неактивен