Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z zapytaniem chyba trywialny, ale
Toom
post 24.11.2005, 14:17:22
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 26.08.2004

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


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
Go to the top of the page
+Quote Post
nospor
post 24.11.2005, 14:22:25
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
SongoQ
post 24.11.2005, 14:23:20
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


  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


--------------------
Go to the top of the page
+Quote Post
Toom
post 24.11.2005, 15:33:01
Post #4





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 26.08.2004

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


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
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: 19.07.2025 - 15:06