cent4
3.07.2011, 10:39:21
Witam.
Mam problem ze zbudowaniem odpowiedniego zapytania nad którym siedzę już dobrych parę dni.
Tworzę małą bibliotekę i mam 2 tabele:
"historia" i "czyteln"
Tabela "historia" ma pola: "Nr_czyt", "Data_wyp"
Tabela "czyteln" ma pola: "Nr_czyt", "Imie", "Nazwisko".
Cel jaki chcę osiągnąć: Jest formularz w którym określam rok i miesiąc - chcę dla podanej daty (rok i miesiąc) mieć wylistowanych wszystkich czytelników, którzy nic nie wypożyczyli w tym okresie - tzn. których Nr_czyt za dany okres nie istnieje w tabeli historia.
Kompletnie nie wiem jak to zrobić.
Zrobiłem inne zapytanie, które listuje mi liczbę wypożyczeń użytkowników, którzy coś wypożyczyli - coś w rodzaju - "Kto najwięcej wypożyczył w podanym okresie" i z tym nie ma problemu:
SELECT h.Nr_czyt, c.Imie, c.Nazwisko, COUNT( * ) AS l_wyp FROM historia AS h JOIN czyteln AS c ON h.Nr_czyt = c.Nr_czyt
WHERE (DATE_FORMAT(h.Data_wyp,'%Y-%m') = '$rok-$miesiac') GROUP BY c.Imie, c.Nazwisko, c.Nr_czyt").
Ale jak zrobić listę czytelników, którzy nic nie wypożyczyli - NIE WIEM.
Proszę o pomoc...
morbic
3.07.2011, 11:40:25
Fakt, nawet lepiej i prościej
cent4
3.07.2011, 21:41:31
Jak to zapisać poprawnie z użyciem NOT EXISTS?
Adi32
3.07.2011, 21:59:30
SELECT cos FROM cos WHERE cos NOT IN (SELECT id_czytelnika FROM czytelnicy)
cent4
4.07.2011, 09:05:58
SELECT DISTINCT h
.Nr_czyt
, c
.Imie
, c
.Nazwisko FROM historia
AS h
JOIN czyteln
AS c ON h
.Nr_czyt
= c
.Nr_czyt
WHERE (DATE_FORMAT(h.Data_wyp,'%Y-%m') = '2010-08') NOT IN (SELECT Nr_czyt FROM czyteln)
Niestety nie działa

- wypisuje wszystkich czuytelników, nawet tych, którzy coś wypożyczyli...
Adi32 jak zastosować poprawnie Twoją radę - tak jak pisałem wcześniej nie udaje mi się to - chyba coś ze składnią jest nie tak :-(
Adi32
4.07.2011, 09:51:12
Przemyśl budowę tego zapytania, będzie działać.
SELECT t1.czystelnicy, t2.cos_innego FROM jakas_tabela t1, jakas_tabela2 t2 WHERE id_usera NOT IN (SELECT id_usera FROM historia WHERE data_wyp = 'dany okres')
cent4
4.07.2011, 10:03:02
Wywołuję takie zapytanie ale dostaję mnóstwo informacji :-(
SELECT DISTINCT h.Nr_czyt, c.Imie, c.Nazwisko FROM czyteln c, historia h WHERE c.Nr_czyt NOT IN (SELECT DISTINCT Nr_czyt FROM historia WHERE DATE_FORMAT(Data_wyp,'%Y-%m') = '2010-08')
Adi32
4.07.2011, 10:05:39
Cytat(cent4 @ 4.07.2011, 11:03:02 )

Wywołuję takie zapytanie ale dostaję mnóstwo informacji :-(
SELECT DISTINCT h.Nr_czyt, c.Imie, c.Nazwisko FROM czyteln c, historia h WHERE c.Nr_czyt NOT IN (SELECT DISTINCT Nr_czyt FROM historia WHERE DATE_FORMAT(Data_wyp,'%Y-%m') = '2010-08')
spróbuj wpisać na sztywno jakąś datę (zgodnie z formatem w bazie), bez DATE_FORMAT
cent4
4.07.2011, 10:12:08
też całe mnóstwo danych.
Ale date format musi być - bowiem podaję tylko rok i miesiąc, a są jeszcze dni i dni muszą być wszystkie z danego miesiąca uwzględniane - więc musi to działać z date format
nospor
4.07.2011, 12:13:07
SELECT c.imie, c.nazwisko FROM czytelnik c WHERE c.nr_czyt NOT IN (SELECT h.nr_czyt FROM historia h WHERE DATE_FORMAT(h.Data_wyp,'%Y-%m') = '2010-08')
cent4
4.07.2011, 12:55:50
nospor dziękuję bardzo.
Wszystko działa dokładnie tak jak chciałem.
Dziękuję jeszcze raz.