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]   

> Без описания
fullzero
Отправлено: 31 Мая, 2012 - 08:41:02
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


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




Есть три таблицы
authors (id, name, description) - авторы
tracks (id, name, description) - треки
authors_tracks (author_id, track_id) в певое поле id автора во второе id трека

Есть функция, выбирает всех авторов на нужную мне букву $_GET['letter'], например буква А она выводит всех авторов на А

PHP:
скопировать код в буфер обмена
  1. function getListAuthors($ALPHA){
  2. $num = 5;
  3. if(empty($page) or $page < 0) $page = 1;
  4. $start = $page * $num - $num;
  5. $sql = "SELECT * FROM authors WHERE name like '".$_GET['letter']."%' LIMIT $start, $num ";
  6. $query = mysql_query($sql);
  7. while($r = mysql_fetch_assoc($query)){
  8. $ret .= '<a href="?author_id='.$r['id'].'">'.$r['name'].'</a><br>';
  9. }
  10. return $ret;
  11. }
  12.  
  13. if($_GET['letter'])
  14. {
  15. echo getListAuthors($ALPHA);
  16. }


Вот вторая функция, должна выводить все песни автора не знаю как вывести названия песен зная author_id исполнителя
PHP:
скопировать код в буфер обмена
  1. // Вывод треков по author_id
  2. function getListTracks($ALPHA){
  3. }
  4. if($_GET['author_id'])
  5. {
  6. echo getListTracks($ALPHA);
  7. }


Слышал что можно выбирать данные сразу из 2 таблиц. Надо найти все треки автора по его id. Как сделать в моём случае? Надеюсь всем понятно что я написал
 
 Top
EuGen Администратор
Отправлено: 31 Мая, 2012 - 08:44:03
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Сам вывод - подобно тому, что у Вас в первой функции.
А вот запрос будет таким:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT tracks.* FROM tracks LEFT JOIN authors_tracks ON tracks.id=authors_tracks.track_id WHERE authors_tracks.author_id=$author_id


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
tuareg
Отправлено: 31 Мая, 2012 - 10:14:34
Post Id


Участник


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


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




Я бы Вам порекомендовал, табличку authors (id, name, description) немного дополнить.
Ввести поле в которое сразу записывать 1 букву имени, сделать по нему индекс. Тогда таблица будет что-то типа authors (id, name,firstLetter, description)
Это нужно для того чтобы выборка по первой букве происходила не через like. На большой таблице будет тормозить
 
 Top
EuGen Администратор
Отправлено: 31 Мая, 2012 - 10:16:51
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




tuareg
Чего ради нарушать целостность данных (следить затем еще за корректностью, хранить лишние данные)? Проще создать индекс длиной в 1 символ. Но и LIKE X% отлично будет использовать индекс, созданный для всего поля, т.к. это точное левое подмножество строки.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
fullzero
Отправлено: 31 Мая, 2012 - 11:31:05
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


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




tuareg LIMIT будет где то около 50 - 100, нагрузка будет не существенная. Ожидается в базе 60 000 композиций. Улыбка

EuGen щас попробую.
(Добавление)
EuGen спасибо, 100й раз выручаешь Улыбка Скоро тебе алтарь поставлю Радость
(Добавление)
У меня была функция

PHP:
скопировать код в буфер обмена
  1. function NavigationAuthors($ALPHA){
  2. $sql = "SELECT * FROM authors WHERE name like '".$_GET['letter']."%'";
  3. $query = mysql_query($sql);
  4. $total = intval((mysql_num_rows($query)-1)/5)+1;
  5. if(empty($page) or $page < 1) $page = 1;
  6. if($page > $total) $page = $total;
  7.  
  8. // Кнопки перехода в начало и в конец
  9. if ($page != 1) $HOME = '<A href="?letter='.$_GET['letter'].'&page=1" class="pag">Начало</A> ';
  10. if ($page != $total) $END = ' <A href="?letter='.$_GET['letter'].'&page=' .$total. '" class="pag">Конец</A>';
  11.  
  12. // Находим страницы с обоих краев, если они есть
  13. if($page - 4 > 0)$page4left = ' <a href="?letter='.$_GET['letter'].'&page='. ($page - 4) .'" class="pag">'. ($page - 4) .'</a> ';
  14. if($page - 3 > 0)$page3left = ' <a href="?letter='.$_GET['letter'].'&page='. ($page - 3) .'" class="pag">'. ($page - 3) .'</a> ';
  15. if($page - 2 > 0)$page2left = ' <a href="?letter='.$_GET['letter'].'&page='. ($page - 2) .'" class="pag">'. ($page - 2) .'</a> ';
  16. if($page - 1 > 0) $page1left = '<a href="?letter='.$_GET['letter'].'&page='. ($page - 1) .'" class="pag">'. ($page - 1) .'</a> ';
  17. if($page + 4 <= $total) $page4right = ' <a href="?letter='.$_GET['letter'].'&page='. ($page + 4) .'" class="pag">'. ($page + 4) .'</a>';
  18. if($page + 3 <= $total) $page3right = ' <a href="?letter='.$_GET['letter'].'&page='. ($page + 3) .'" class="pag">'. ($page + 3) .'</a>';
  19. if($page + 2 <= $total) $page2right = ' <a href="?letter='.$_GET['letter'].'&page='. ($page + 2) .'" class="pag">'. ($page + 2) .'</a>';
  20. if($page + 1 <= $total) $page1right = ' <a href="?letter='.$_GET['letter'].'&page='. ($page + 1) .'" class="pag">'. ($page + 1) .'</a>';
  21.  
  22. // Вывод переключателей для постраничной навигации
  23. $ret = "<center>".$HOME.$page4left.$page3left.$page2left.$page1left.$page.$page1right.$page2right.$page3right.$page4right.$END."</center>";
  24. return $ret;
  25. }


Теперь придётся делать пагинатор и для Tracks Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB