Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wielosc danych w jednej komorce tabeli, jak rozwiazac problem wielosci danych?
atchor
post
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 13.02.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował atchor 29.12.2006, 21:45:15
Go to the top of the page
+Quote Post
cadavre
post
Post #2





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


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.

Ten post edytował cadavre 30.12.2006, 01:16:23
Go to the top of the page
+Quote Post
atchor
post
Post #3





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 13.02.2006

Ostrzeżenie: (0%)
-----


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


Ten post edytował atchor 30.12.2006, 11:51:04
Go to the top of the page
+Quote Post
Flow my tears
post
Post #4





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 23.09.2006

Ostrzeżenie: (0%)
-----


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'
Go to the top of the page
+Quote Post
orson
post
Post #5





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
atchor
post
Post #6





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 13.02.2006

Ostrzeżenie: (0%)
-----


fajnie, dzieki, ale jak teraz wyswietlic te dane po przecinku? uzywac w ogole polecenia mysql_fetch_array?
Go to the top of the page
+Quote Post
Flow my tears
post
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 23.09.2006

Ostrzeżenie: (0%)
-----


Które dane chcesz wyświetlać po przecinku?
Go to the top of the page
+Quote Post
atchor
post
Post #8





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 13.02.2006

Ostrzeżenie: (0%)
-----


no autorów
Go to the top of the page
+Quote Post
cadavre
post
Post #9





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
atchor
post
Post #10





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 13.02.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Flow my tears
post
Post #11





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 23.09.2006

Ostrzeżenie: (0%)
-----


  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 ;-)
Go to the top of the page
+Quote Post
atchor
post
Post #12





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 13.02.2006

Ostrzeżenie: (0%)
-----


a co ze zwykłym JOIN, nie da się połączyć po prostu dwóch tabel?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 13:04