blob
24.05.2004, 15:15:23
Witam,
Nadszedł moment, że trzeba zapytać o radę..
Mam następujący problem:
Ponieważ mój Mysql nie obsługuje podzapytań, tworzę sobie tabelę tymczasową 'tmp', która jest wynikiem działania LEFT JOINa na tabelach "towar" i "dostawcy".
Taka tabela ma pola(np.): id_towaru, nazwa_towaru, id_dostawcy.
Tam, gdzie nie było dostawcy, pole id_dostawcy jest NULL i jest OK.
Teraz chcę wyświetlić tylko ten towar, który NIE jest przypisany do mojego dostawcy(uzytkownika o id=9), czyli [sql:1:f6d014acd1] select * from tmp where id_dostawcy !=9[/sql:1:f6d014acd1]
Zakładam że wszystkie inne rekordy w tym polu są NULL, w rezultacie zapytanie jest wykonywane, ale nie dostaję żadnych wyników...
Moje pytanie: jak wyciągnąć z bazy tylko te rekordy, które w określonym polu mają wartość NULL?
Z góry dziękuję!
Aiker
24.05.2004, 15:41:01
[sql:1:58625aecee]select *
FROM tmp
WHERE id_dostawcy = NULL[/sql:1:58625aecee]
Moze tak??
blob
24.05.2004, 15:44:41
No właśnie nie działa.. tzn. zapytanie jest wykonane poprawnie, ale nie dostaję żadnych wyników. Na moje też powinno działać, w sumie to pewnie jakaś drobnostka, ale zaciąłem się.
blob
24.05.2004, 15:47:08
Rezultat SQL
Host: localhost
Baza danych : b125
Czas wygenerowania: 24 Maj 2004, 16:45
Wygenerowany przez: phpMyAdmin 2.5.6 / MySQL 4.0.1-alpha-nt
zapytanie SQL: EXPLAIN SELECT * FROM tmp WHERE id_sklepu = NULL ;
Rekordów: 1
table type possible_keys key key_len ref rows Extra
tmp ALL NULL NULL NULL NULL 10000 where used
blob
24.05.2004, 16:08:47
Napiszę w skrócie jak to miało wyglądać:
Zasadnicze tabele: produkty, dostawcy, ceny.
Tabela "ceny" ma łączyć dwie poprzednie i ma pola: id_ceny, id_produkt, id_dostawcy, cena.
Jestem zainteresowany wyświetleniem tych produktów, które nie są przypisane do usera(dostawcy).
Idealne zapytanie:
[sql:1:4f5ee00530] SELECT * FROM produkty WHERE id_produktu = 'SELECT id_produktu FROM ceny WHERE id_dostawcy !=9' [/sql:1:4f5ee00530]
Jak już wcześniej napisałem moja wersja MySQLa nie obsługuje podzapytań, więc muszę jakoś rozwiązać tem problem.
Wykombinowałem tabele tymczasową:
[sql:1:4f5ee00530]
CREATE TABLE IF NOT EXISTS tmp (
id_produktu int(11) NOT NULL auto_increment,
nazwa varchar(30) NOT NULL default '',
opis varchar(255) NOT NULL default '',
producent varchar(20) NOT NULL default '',
id_produkt int(11)
id_dostawcy int(11) default '0',
cena double default NULL,
detale varchar(255) default NULL,
PRIMARY KEY (id_sprzetu)
);INSERT INTO tmp SELECT * FROM produkty AS a LEFT JOIN ceny AS b ON (a.id_produktu = b.id_produkt AND b.id_dostawcy =
$userid); [/sql:1:4f5ee00530]
Zakładając że w w tabeli "ceny" mam tylko jednego dostawcę o id=9, do którego są przypisane jakieś produkty(np.10szt),
to w tabeli "tmp" będą w pełni wypełnione tylko niektóre rekordy, a pozostałe w polach od id_produkt będą miały NULL
I o te rekordy właśnie mi chodzi...
Być może od samego początku jest źle, lub jest łatwiejszy sposób..
Jak macie jakieś lepsze rozwiązania to będę dźwięczny...
Aiker
24.05.2004, 16:49:15
[sql:1:4036f6fe99]select *
FROM tmp
WHERE id_dostawcy is NULL[/sql:1:4036f6fe99]
Tak powinno zadzialac
blob
24.05.2004, 16:53:52
Sorry za zajmowanie miejsca na forum... proszę moderatora o usunięcie tego tematu, bo się spalę ze wstydu... BTW dzieki!
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.