Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL]Pomoc w stworzeniu zapytania
Forum PHP.pl > Forum > Przedszkole
Krzaczo
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.
webasek
  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. ?>
Krzaczo
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
topp
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
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.