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 29.12.2006, 21:44:43
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 30.12.2006, 01:12:25
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


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
atchor
post 30.12.2006, 11:50:36
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 30.12.2006, 12:00:43
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 30.12.2006, 12:10:21
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


--------------------
Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
Go to the top of the page
+Quote Post
atchor
post 30.12.2006, 13:01:38
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 30.12.2006, 14:38:45
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 30.12.2006, 15:26:08
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 30.12.2006, 15:27:54
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...


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
atchor
post 30.12.2006, 16:20:00
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 30.12.2006, 18:44:07
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 30.12.2006, 22:10:41
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.06.2025 - 23:12