Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wielosc danych w jednej komorce tabeli
Forum PHP.pl > Forum > PHP
atchor
Witam.

Mam do napisania kod obsługujący mini-bibliotekę internetową, taki mały cms. Powstał problem przy tabelach z danymi tytułów książek i autorów:

acms_library_titles (książki)
acms_library_authors (autorzy)

Jak wiadomo, każdy autor może napisać wiele książek ale także jedna książka może mieć wielu autorów. W moim systemie chciałbym zawrzeć dane n.t. wszystkich autorów danej książki, toteż postanowiłem tabelę acms_library_authors opatrzyć tylko w dane dot. samego autora a w acms_library_title jest pole authorid, które staje się relacyjne wobec tabeli z autorami.

Jak skonstruować tabelę z książkami tak, aby można było zapisać kilku autorów (ich ID):

a) czy pole authorid zrobić jako VARCHAR i wpisywać tam np. 09, 12, 16 (i jak to później odkodować w php?)
B) czy pole authorid powielić na kilka np. author1id, author2id, author3id... (tak miałem w starym systemie)
c) czy też może macie inny pomysł?

Ufff, się napisałem :-) Proszę o pomoc.
cadavre
Ja standardowo autorów zapisywałbym w postaci: id | nazwisko a autorów do danej książki przypisywał poprzez wpisanie id'ów po przecinkach - resztę niech zrobi
  1. <?php
  2. ?>
w php.
atchor
fajnie, dzieki ale teraz powstal problem, jak wydobyte z bazy ID, czyli np. sekwencję 1,2 (przecinek jako separator) zamienić na instrukcję pobrania z tabeli autorów rekordów o ID=1 i ID=2??

Ja mom takie cuś ale polecenie chyba nie obsługuje tablicy :/ Jak przekształcić polecenie pobranai z bazy?

  1. <?php
  2. $authors = explode(',', $bookrow['authorid']);
  3. $ask_for_author = @mysql_query("SELECT name, surname, photo FROM acms_library_authors WHERE id=" . $authors) or die(mysql_error());
  4. ?>


Cytat
Nieznana kolumna 'Array' w where clause
Flow my tears
Lepiej stworzyć sobie jeszcze jedną tabele, np.

acms_library_authors_titles
author_id (unikalne ID autora), title_id (unikalne id książki)

Która będzie łączyła autorów z książkami.

Później już łatwo wyciągać z tego wszystko, czego chcemy, np. tak jak w przykładzie autorów danej książki:

  1. SELECT a.name, a.surname, a.photo FROM acms_library_authors_titles x LEFT JOIN acms_library_authors a ON a.id=x.author_id WHERE x.title_id='ID_KSIAZKI'
orson
witam

można jeszcze użyć FIND_IN_SET w mysql ale rozwiązanie z tabelą pośredniczącą jest dużo bardziej elastyczne i raczej to polecam

pozdrawiam
atchor
fajnie, dzieki, ale jak teraz wyswietlic te dane po przecinku? uzywac w ogole polecenia mysql_fetch_array?
Flow my tears
Które dane chcesz wyświetlać po przecinku?
atchor
no autorów
cadavre
Przy użyciu dodatkowej tabeli nic nie zapisuje po przecinku jak ja sugerowałem. Każda książka bowiem może mieć kilka wpisów w tej dodatkowej tabeli. O ile sam dobrze zrozumiałem założenie...
atchor
No chodzi tak szczegółowo o to, żeby teraz wyświetlić autorów do książki wg przykładu:

Tytuł: ble ble ble
Autor: Jan Kowalski, Maria Kowalska, Zbigniew Polak
Flow my tears
  1. <?php
  2. $q = mysql_query( 'SELECT a.name, a.surname, a.photo FROM acms_library_authors_titles x LEFT JOIN a
    cms_library_authors a ON a.id=x.author_id WHERE x.title_id='
    '.$unikalny_id_ksiazki.''' );
  3. while( $r = mysql_fetch_row( $q ) )
  4. {
  5.  echo $r[0].' '.$r[1].', ';
  6. }
  7. ?>


A z przecinkiem na końcu spróbuj sobie poradzić sam ;-)
atchor
a co ze zwykłym JOIN, nie da się połączyć po prostu dwóch tabel?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.