Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wypisanie klientów z bazy spełniających określone wymagania
Forum PHP.pl > Forum > Bazy danych > MySQL
Aui06
Witam

Mam pewien problem muszę wypisać z bazy klientów, którzy spełniają określone wymagania m.in.:

Ich nazwa nie zawiera (D) lub (INT), - (`adr_Nazwa` NOT LIKE '%(D)%' OR `adr_Nazwa` NOT LIKE '%(INT)%' )

Klient nie może posiadać ceny z id 21. (`ck_IdCecha` = '21')

W pierwszej fazie kiedy wyeliminowałam jedynie klientów z (D) lub (INT) w nazwie wszystko działało poprawnie. Problem pojawił się kiedy chciałam dodatkowo usunąć klientów posiadających cechę 21. W związku z tym, że klienci posiadają kilka cech za pomocą "NOT IN" uzupełniłam id (`kh_Id`) klientów posiadających te cechę z puli tak by nie byli brani pod uwagę.

I tu pojawił się problem bo polecenie (`adr_Nazwa` NOT LIKE '%(D)%' OR `adr_Nazwa` NOT LIKE '%(INT)%' ) przestało być obsługiwane. Czyli pojawiły się w wynikach nazwy z (D) lub (INT). Jeżeli będę jedynie nie wyświetlać np. z (D) to wszystko będzie dobrze błąd jest tylko w przypadku gdy posiadam jednocześnie (D) lub (INT).



  1. SELECT DISTINCT `kh_Symbol`, `adr_Nazwa` FROM `adr__Ewid`
  2. INNER JOIN `kh__Kontrahent` ON `adr_IdObiektu` = `kh_Id`
  3. INNER JOIN `kh_CechaKh`ON `ck_IdKhnt` = `kh_Id`
  4. WHERE `kh_InstKredytowa` = true
  5. AND `kh_Zablokowany` != true
  6. AND `adr_TypAdresu`='1'
  7. AND (`adr_Nazwa` NOT LIKE '%(D)%' OR `adr_Nazwa` NOT LIKE '%(INT)%' )
  8. AND `kh_Id` NOT IN (SELECT kh_Id FROM `kh__Kontrahent` INNER JOIN `kh_CechaKh`ON `ck_IdKhnt` = `kh_Id` WHERE `ck_IdCecha` = '21')
  9. GROUP BY `kh_Id`



Wie ktoś jak naprawić to polecenie.
SpiritCode
A dlaczego w linii 8 wybierasz prawie to samo co w całości? Nie możesz dorzucić nowego warunku?
[MYSQL] pobierz, plaintext
  1. `ck_IdCecha`!=21
[MYSQL] pobierz, plaintext
Aui06
Próbowałam już z w ten sposób i niestety jeżeli klient posiada kilka cech usuwane jest wystąpienie z cechą `ck_IdCecha`=21 a pozostałe zostają.


Czyli np. klient ma cechę 21, 10, 15 przy `ck_IdCecha`!=21 usuwa mi 21 ale klienta i tak wyświetli bo ma jednocześnie cechy 10, 15.
SpiritCode
Z tego co widzę co ck_IdKhnt jest kluczem zewnętrznym dla kh_Id.

Jeśli tak to zamień:

  1. AND `kh_Id` NOT IN (SELECT kh_Id FROM `kh__Kontrahent` INNER JOIN `kh_CechaKh`ON `ck_IdKhnt` = `kh_Id` WHERE `ck_IdCecha` = '21')


na:
  1. AND `ck_IdKhnt` NOT IN (SELECT ck_IdKhnt FROM `kh_CechaKh` WHERE `ck_IdCecha` = '21')


I spróbuj
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-2024 Invision Power Services, Inc.