Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Подкорркетируйте запрос

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Maiai
Отправлено: 24 Октября, 2009 - 15:42:59
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




Здравствуйте, решил заняться оптимизацией БД, громко сказано оптимизацией Улыбка Но задача заключается в том, что нужно разбить одну большую таблицу, на несколько более мелких. Эта часть уже выполнена, теперь переходим к исправлению запросов к базе данных, вот тут то и возникла проблема, которую опишу ниже:

Запрос:
CODE (sql):
скопировать код в буфер обмена
  1. SELECT DISTINCT `song`.`song_id`,`song`.`song_name`,`artist`.`artist_id`,`artist`.`artist_name`,`song`.`song_raiting` FROM `song`,`artist` ORDER BY `song`.`song_id` DESC LIMIT 0 , 10


Резултат примерно следующий:

CODE (text):
скопировать код в буфер обмена
  1. song_id song_name       art_id  art_name        raiting
  2.  
  3. 53      Гордость        1       5nizza  1
  4. 53      Гордость        7       Т9      1
  5. 53      Гордость        4       Ноггано 1
  6. 53      Гордость        3       Nickelback      1
  7. 53      Гордость        5       Джанго  1
  8. 53      Гордость        2       Deep Purple     1
  9. 53      Гордость        6       Муслим Магомаев 1
  10. 52      Пока Я Помню, Я Живу    1       5nizza  1
  11. 52      Пока Я Помню, Я Живу    7       Т9      1
  12. 52      Пока Я Помню, Я Живу    4       Ноггано 1


Вот тут и проблема, так как с песня должна выводиться один раз. Пример:

CODE (text):
скопировать код в буфер обмена
  1. song_id song_name       art_id  art_name        raiting
  2.  
  3. 53      Гордость        1       5nizza  1
  4. 52      Пока Я Помню, Я Живу    1       5nizza  1
  5. 51... и т д


В MySQL не особо силен, так что прошу помощи, подкорректировать запрос.

Заранее благодарен.
 
 Top
Enjoy
Отправлено: 24 Октября, 2009 - 16:30:11
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Окт. 2009  
Откуда: Белгород


Помог: 0 раз(а)




Нужно было примерно так:

CODE (text):
скопировать код в буфер обмена
  1. SELECT ....
  2. FROM artist JOIN song ON artist.id = song.artist_id
  3. ....

Тогда таблицы соединятся по условию что песня принадлежит певцу. А у вас соединены декартовым произведением, т.е. каждая строка с каждой.

DISTINCT ставит уникальность на весь ряд результата, а не на первый столбец.
 
 Top
Maiai
Отправлено: 24 Октября, 2009 - 16:40:39
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




Вот помогло, большое спасибо за ответ, пойду дaльше штудировать синтаксис оператора SELECT Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB