Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MYSQL]Pomoc w stworzeniu zapytania
-Krzaczo-
post 3.10.2008, 13:48:28
Post #1





Goście







Siema. Mam w bazie trzy tabele:
-autorzy
-książki
-autorzy książek.

Użytkownik w polu multiselect zaznacza jednego lub więcej autorów, a baza na tej podstawie ma zwrócić te książki, które na pewno były pisane przez tych autorów (być może jeszcze przez kogoś więcej, ale to nie ważne).

Jak stworzyć takie zapytanie?

Przykład
autorzy
id autor
1 xxx
2 yyy
3 zzz

ksiazki
id tytul
1 aaa
2 bbb

autorzy ksiazek
id ksiazki id autora
1 1
1 2
1 3
2 2

i gdy user wybiera autorow 1 i 2 baza powinna zwrocic ksiazke 1.
Go to the top of the page
+Quote Post
webasek
post 3.10.2008, 14:10:57
Post #2





Grupa: Zarejestrowani
Postów: 274
Pomógł: 35
Dołączył: 18.07.2008
Skąd: Kielce

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


  1. SELECT ksiazki.id, ksiazki.tytul FROM ksiazki LEFT JOIN autorzy_ksiazek ON ksiazki.id = autorzy_ksiazek.id_ksiazki WHERE autorzy_ksiazek.id_autora IN ($zbior)


  1. <?php
  2. $zbior = "(".$_POST[autor1].",".$_POST[autor2].")";
  3. ?>


--------------------
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota,
choć nie jestem pewien co do tej pierwszej." Albert Einstein

Wirtualny Rynek Predykcyjny
Go to the top of the page
+Quote Post
-Krzaczo-
post 3.10.2008, 15:27:29
Post #3





Goście







Cytat
i gdy user wybiera autorow 1 i 2 baza powinna zwrocic ksiazke 1.


a wg mnie twoje zapytanie zwróci też książkę numer 2....
a wtedy jest źle, bo książkę 2 napisał tylko autor 2, a ja chce te książki które napisał jednocześnie autor 1 i autor 2.

ale dzięki za fatyge
Go to the top of the page
+Quote Post
topp
post 3.10.2008, 21:43:58
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 1
Dołączył: 3.10.2008

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


Przychodzi mi do głowy tylko sposób mocno zakombinowany:

  1. SELECT ksiazki.id, ksiazki.tytul
  2. FROM ksiazki JOIN autorzy_ksiazek ON ksiazki.id = autorzy_ksiazek.id_ksiazki
  3. WHERE autorzy_ksiazek.id_autora IN($idki_autorow)
  4. GROUP BY ksiazki.id
  5. HAVING COUNT(autorzy_ksiazek.id_autora) = $liczba_autorow


Myślę, że zmienne $idki_autorow i $liczba_autorow sa dosc jasne.

Nie zastanawiałem się nad wydajnością, ale dla średniej wielkości bazki, przy założeniu, że żaden z autorów nie spłodził całej biblioteki, powinno banglać w miarę przyzwoicie. winksmiley.jpg
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: 6.07.2025 - 16:27