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]   

> Описание: никак не могу извлечь массив из строки БД MySQL
Pelsh
Отправлено: 09 Января, 2010 - 16:36:22
Post Id



Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2010  


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




Вопрос такой: как извлечь из строки БД массив
Подробнее:
имеем примерно такую таблицу MySQL:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.    autor    |        book          |     book_id
  3. --------------------------------------------------
  4.    Пушкин   | Евгений Онегин       | 88798656567
  5.             | Бесы                 | 58987987987
  6.             | Анчар                | 18098098908
  7. --------------------------------------------------
  8.    Гоголь   | Нос                  | 76686786876
  9.             | Вий                  | 98079709089
  10. --------------------------------------------------
  11.  


мне нужно написать скрипт который делает такую выборку:
сперва обращаемся к таблице - ищем там например "Пушкин" в столбце "autor", затем если такой автор найден выводим на печать все его книги в виде:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <a href="88798656567">Евгений Онегин</a>
  3. <a href="58987987987">Беcы</a>
  4. <a href="18098098908">Анчар</a>
  5.  


я застопорился вот на этом:

PHP:
скопировать код в буфер обмена
  1.  
  2. /* составить запрос, который выберет Пушкина */
  3. $query = "SELECT * FROM chtivo_books_autors WHERE autor = 'Пушкин'";
  4.  
  5.  
  6. /* Выполнить запрос. Если произойдет ошибка - вывести ее. */
  7. $res = mysql_query($query) or die(mysql_error());
  8.  
  9.  
  10. /* Как много нашлось таких */
  11. $number = mysql_num_rows($res);
  12.  
  13.  
  14. /* Напечатать всех в красивом виде*/
  15. if ($number == 0)
  16. {
  17.   echo "<CENTER><P>Такого автора нет</CENTER>";
  18. }
  19.  
  20. else
  21. {
  22. /* ВОТ НА ЭТОМ МЕСТЕ Я ЗАСТРЯЛ */  
  23.   }
  24.  


или может лучше создавать на каждого автора отдельную таблицу в БД и не парить мозг?
или это будет сильно тормозить работу?

что посоветуете.
 
 Top
SAD Модератор
Отправлено: 09 Января, 2010 - 17:24:12
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




сделай 2 таблицы:

1)

id_autor | autor
1 | Пушкин
2 | Гоголь

и т.д.

2) id_autor | book | book_id
1 | Евгений Онегин | 88798656567
1 | Бесы | 58987987987
2 | Нос | 76686786876
типа такого

а запрос так будет
CODE (SQL):
скопировать код в буфер обмена
  1. $query = "SELECT * FROM `таблица_с_авторами` a, `таблица_с_книгами` b WHERE a.autor = 'Пушкин' AND a.id_autor=b.id_autor;


потом

PHP:
скопировать код в буфер обмена
  1. while ( $per = mysql_fetch_array( $query) ) {
  2. echo '<a href="'.$per['book_id'].'">'.$per['book'].'</a>'."\n";
  3. }

(Отредактировано автором: 09 Января, 2010 - 17:42:11)

 
 Top
Pelsh
Отправлено: 09 Января, 2010 - 17:36:20
Post Id



Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2010  


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




Спасибо.

Вот тогда следующий вопрос предположим моя таблица со списком книг содержит 3000 записей и посещаемость у сайта довольно приличная - вопрос такой - мне кажется перебор всей таблицы в 3000 записей будет сильно напрягать БД и сервер? или я не прав?

ведь вот этот запрос будет перебирать всю таблицу с книгами
CODE (SQL):
скопировать код в буфер обмена
  1. $query = "SELECT * FROM `таблица_с_авторами` a, `таблица_с_книгами` b WHERE b.autor = "Пушкин" AND a.id_autor=b.id_autor;


и можно подробнее объяснить как работает это запрос, просто мне кажется там a b - перепутаны местами во второй части запроса.

только сейчас начал разбираться майэскуэлем - раньше все было на файлах) проблем никаких, но вот с нагрузкой проблема)

(Отредактировано автором: 09 Января, 2010 - 17:38:52)

 
 Top
SAD Модератор
Отправлено: 09 Января, 2010 - 17:49:03
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




сори, поправил
нагрузки не будет
нагрузка будет , если в таблице с книгами будут еще записи, а ты будешь выбирать все(хотя надо 2), нагрузки тогда можно избежать так

CODE (SQL):
скопировать код в буфер обмена
  1. $query = "SELECT b.book,b.book_id FROM `таблица_с_авторами` a, `таблица_с_книгами` b WHERE a.autor = "Пушкин" AND a.id_autor=b.id_autor";


то есть выбирать не все, а только то, что нужно

теперь про запрос


CODE (SQL):
скопировать код в буфер обмена
  1. `таблица_с_авторами` a
, значит , что я дал как бы другое имя таблице, чтобы не писать все имя таблицы, типа такого
CODE (SQL):
скопировать код в буфер обмена
  1. `таблица_с_книгами`.book

CODE (SQL):
скопировать код в буфер обмена
  1. WHERE a.autor = "Пушкин" AND a.id_autor=b.id_autor;

выбираю автора такого то, и чтобы id_autor были равны в таблицах

(Отредактировано автором: 09 Января, 2010 - 17:53:31)

 
 Top
Pelsh
Отправлено: 09 Января, 2010 - 17:54:33
Post Id



Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2010  


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




SAD, спасибо большое!!!
И еще появился такой вопрос - какое количество таблиц может содержать одна БД,так чтобы небыло перебора?
 
 Top
SAD Модератор
Отправлено: 09 Января, 2010 - 17:56:34
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




ограничения не знаю, но база должна быть правильно сделана, чтобы не было лишнего.
об этом читай в инете)

и почитай вот это

http://blog[dot]kron0s[dot]com/top-20-my[dot][dot][dot]l-best-practices

(Отредактировано автором: 09 Января, 2010 - 18:00:13)

 
 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