Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem chyba trywialny, ale
Forum PHP.pl > Forum > Bazy danych > MySQL
Toom
Mam bazę książek "ksiazki" z kluczem na "isbn" (varchar), bazę "nowosci" (id,isbn) i "czarnalista" (id,isbn).
Chciałbym pokazać nowości (10 losowych) z bazy "ksiazki" na podstawie bazy "nowosci", ale z uwzględnieniem, że jeśli książka jest w bazie "czarnalista" ma być pominięta.
Oczywiście chodzi o 1 zapytanie.

Próbowałem już:
  1. SELECT DISTINCT ksiazki.id, ksiazki.tytul, ksiazki.autor, ksiazki.dzial, ksiazki.poddzial, ksiazki.isbn, ksiazki.cena, ksiazki.stan
  2. FROM ksiazki, nowosci, czarnalista
  3. WHERE nowosci.isbn = ksiazki.isbn AND czarnalista.isbn != ksiazki.isbn
  4. ORDER BY rand( )
  5. LIMIT 10

Mając ok 2000 pozycji w bazie ksiązek, 6 w bazie "nowosci" i 2 w "czarnalista" które (ZAZNACZAM) pokrywają się z tymi z "nowosci" Powinien wyświetlić 4 książki, a wyświetla 6.

Proszę pomóżcie, bo siedzę już nad tym i nic...
Pozdrawiam,
TSz
nospor
po pierwsze jak na moj gust masz złą bazę. Powienienes miec tylko jedną tabelę ksiazki a w niej dodatkowe pola: NOWOSC, CZARNA_LISTA i w zaleznosc jaka by tam byla wartosc to bys wiedzial co i jak i nie musial latac po kilku tabelach

co do tej struktury to by bylo chyba tak:
  1. SELECT DISTINCT ksiazki.id, ksiazki.tytul, ksiazki.autor, ksiazki.dzial, ksiazki.poddzial, ksiazki.isbn, ksiazki.cena, ksiazki.stan
  2. FROM ksiazki LEFT JOIN nowosci ON nowosci.isbn = ksiazki.isbn LEFT JOIN czarnalista ON czarnalista.isbn = ksiazki.isbn WHERE nowosci.isbn IS NOT NULL AND czarnalista.isbn IS NULL
  3. ORDER BY rand( )
  4. LIMIT 10
SongoQ
  1. SELECT ksiazki.id, ksiazki.tytul, ksiazki.autor, ksiazki.dzial, ksiazki.poddzial, ksiazki.isbn, ksiazki.cena, ksiazki.stan
  2. FROM nowosci, ksiazki LEFT JOIN czarnalista ON (czarnalista.isbn = ksiazki.isbn)
  3. WHERE nowosci.isbn = ksiazki.isbn AND czarnalista.isbn IS NULL
  4. ORDER BY rand( )
  5. LIMIT 10
Toom
Dzięki, Obydwie konstrukcje działają smile.gif
"Latać" po tabelach muszę, bo cała baza produktów jest często importowana z CSV (ok 40000 prod) a nowości i czarną listę ustala się w panelu adm. strony www.
Swoją drogą ciekawe jak to zapytanie będzie działało na tej dużej bazie.

Pozdrawiam,TSz
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.