За последние 24 часа нас посетили 97265 программистов и 2681 робот. Сейчас ищут 1475 программистов ...

Вывод нескольких авторов

Тема в разделе "PHP для новичков", создана пользователем Nikolai_, 13 янв 2013.

  1. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Коллеги, подскажите, пожалуйста, решение.

    Есть таблица books с записями названий книг. Необходимо выводить списком авторов книг и названия соответствующих книг. Но дело в том, что автор может быть не один, а 2 или даже 3 и по каждому из них еще можно будет делать выборку.

    Как наиболее оптимально сделать, чтобы выводились автор(ы) и названия книг?

    Может быть, сделать доп. таблицу authors с полями id и name. А в таблице books сделать доп. поле id_author, где писать через запятую id авторов: «17, 36, 109». При выводе считать всё из таблицы authors в массив и написать функцию, которая заменял бы id_author на соответствующую фамилию.

    Или все это как-то можно попроще и получше делать?
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А как же правила нормализации базы??? Потом замучаешься...

    Создай отдельную таблицу авторов с полями id и name.
    таблице books сделать доп. поле id_author.
    Правильно мыслишь... таким образом в таблице books будет несколько записей с одним и тем же id_author.
     
  3. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Похоже придется так сделать:

    В таблице books поля id (ид книги), name (название книги).

    В таблице authors поля id (ид автора), name (ФИО автора).

    И еще одна таблица books_authors с полями id_book (ид книги), id_author(ид автора) с записями какой автор какой-книге соответствует.
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Зачем, не вижу смысла...

    Сделай как я написал, собственно ты так же в начале хотел. id_author сделай внешним ключом который будет ссылаться на authors.id

    Если будет отдельная таблица, тем самым еще усложнишь работу с базой, составление sql запросов.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.132
    Симпатии:
    1.251
    Адрес:
    там-сям
    Раз авторы и книги имеют отношение многие-ко-многим, то нужна таблица-связка. Nikolai_ кажется об этом сказал :)
    Истинно так!
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Ну если действительно many-to-many тогда да.

    Что то вечером мозг отлючается... а почему бы не реализовать one-to-many?
    Я не совсем правильно написал, у 1 книги может быть несколько авторов.
    authors.book_id внешний ключ к books.id

    Будет несколько записей в таблице authors которые ссылаются на 1 запись в таблице books.Так легче работать. Вроде корзина покупателя так же строится... или же мне надо выспаться? :)
     
  7. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    Все верно
     
  8. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    По-моему, у одного автора может быть много разных книг. Как и у одной книги - несколько авторов. Так что с таблицей-связкой.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    три таблицы
    книги, авторы, и кто кому кем приходится
     
  10. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Ну, допустим с размещением данных вопрос решен. А как теперь выводить ФИО автора или авторов к каждой записи в общем перечне книг?

    Может быть вот так.

    1) Сделать запрос к таблице books_authors связав ее с таблицей authors. Создать многомерный массив на основе значений из этих таблиц.

    2) Сделать запрос к таблице books.

    3) Выводить список книг на основе запроса к books, а автора или авторов к каждой книге выводить при помощи спец. функции. Аргументом ф-ии задавать id книги. Ф-я обрабатывает массив, созданный в пункте первом и выводит ФИО соответствующих авторов.

    Я в правильном направлении мыслю?
     
  11. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    да да, нужно связку делать, самое оптимальное решение.
    ТАБЛЕ
    id_книги и id_автора
    а при выборке дергать по айди книги всех принадлежащих ей авторов
    Второй запрос делай по поиску айди книге и массивом выводи всех авторов
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я за несколько запросов. но можно и один джоин.
     
  13. squanto

    squanto Новичок

    С нами с:
    28 сен 2013
    Сообщения:
    2
    Симпатии:
    0
    Есть у кого нибудь исходниики этого скрипта?