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
Форумы портала PHP.SU :: Версия для печати :: Подкорркетируйте запрос
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Подкорркетируйте запрос

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

1. Maiai - 24 Октября, 2009 - 15:42:59 - перейти к сообщению
Здравствуйте, решил заняться оптимизацией БД, громко сказано оптимизацией Улыбка Но задача заключается в том, что нужно разбить одну большую таблицу, на несколько более мелких. Эта часть уже выполнена, теперь переходим к исправлению запросов к базе данных, вот тут то и возникла проблема, которую опишу ниже:

Запрос:
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 не особо силен, так что прошу помощи, подкорректировать запрос.

Заранее благодарен.
2. Enjoy - 24 Октября, 2009 - 16:30:11 - перейти к сообщению
Нужно было примерно так:

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

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

DISTINCT ставит уникальность на весь ряд результата, а не на первый столбец.
3. Maiai - 24 Октября, 2009 - 16:40:39 - перейти к сообщению
Вот помогло, большое спасибо за ответ, пойду дaльше штудировать синтаксис оператора SELECT Улыбка

 

Powered by ExBB FM 1.0 RC1