Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z porównaniem dwóch kolumn typu varchar
neon85
post 29.04.2010, 20:52:55
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.03.2009

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


Witam!
Mam problem z porównianiem tak, jak w temacie dwóch kolumn typu varchar.

Mam dwie kolumny typu varchar i chciałbym uzyskać tylko ten rekord, w którym dane się nie powielają.

Korzystam z zapytania:
  1. SELECT p.products_image FROM products p JOIN Towary t ON p.products_id=t.products_id WHERE p.products_image <> t.Zdjecie


I podaje mi, pusty wynik, chociaż na 100% jest inna wartość.

Próbowałem z Like:
  1. SELECT p.products_image
  2. FROM products p
  3. JOIN Towary t ON p.products_id = t.products_id
  4. WHERE t.Zdjecie NOT LIKE p.products_image


Ale też pojawia się pusty wynik.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Mchl
post 29.04.2010, 20:58:27
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


A są wiersze spełniające warunek złączenia?
Go to the top of the page
+Quote Post
neon85
post 29.04.2010, 21:00:54
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.03.2009

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


Zgadzają sie, z tym nie ma akurat problemu.
Jak dam zapytanie (bez NOT):
  1. SELECT p.products_image
  2. FROM products p
  3. JOIN Towary t ON p.products_id = t.products_id
  4. WHERE t.Zdjecie LIKE p.products_image


To pojawiają sie wiersze o takich samcyh nazwach.
Go to the top of the page
+Quote Post
Mchl
post 29.04.2010, 21:11:32
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


A jaki masz ustawiony algorytm porównywania znaków, i jakich różnic szukasz?
Bo na przykład dla utf8_general_ci 'dwóch' = 'DWOCH' = 'DwÓcH' = ...
Go to the top of the page
+Quote Post
neon85
post 29.04.2010, 21:20:02
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.03.2009

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


Dla oby dwóch mam latin2_general_ci, poza tym,
najczęsciej jest to porównanie jakiegośc stringu z wartością null
Go to the top of the page
+Quote Post
Mchl
post 30.04.2010, 08:04:37
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Kod
SELECT 'aa' <> NULL
> NULL

SELECT 'aa' = NULL
> NULL

SELECT 'aa' LIKE NULL
> NULL

SELECT 'aa' NOT LIKE NULL
> NULL


Jak chcesz sprawdzać NULL musisz użyć IS NULL / IS NOT NULL

Ten post edytował Mchl 30.04.2010, 08:05:25
Go to the top of the page
+Quote Post
phpion
post 30.04.2010, 08:51:57
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Do tego co napisał Mchl jako ciekawostkę dodam, że NULL NULLowi nierówny smile.gif
Kod
mysql> SELECT IF(NULL = NULL, 'rowne', 'rozne');
+-----------------------------------+
| IF(NULL = NULL, 'rowne', 'rozne') |
+-----------------------------------+
| rozne                             |
+-----------------------------------+
1 row in set (0.00 sec)

Wydawać się to może głupie i dziwne, ale wynika to stąd, że NULL tak naprawdę nie ma wartości (to po prostu NULL winksmiley.jpg), a jeśli nie można określić jego wartości to nie można również sprawdzić czy jest równy innemu NULLowi (dla którego również nie można określić wartości).
Go to the top of the page
+Quote Post
neon85
post 30.04.2010, 20:05:58
Post #8





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.03.2009

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


Dzieki, za info NULL'em, kompletnie o tym zapomniałem:(
Prawidłowe zapytanie powinno wygładać tak:
  1. SELECT p.products_image FROM products p JOIN Towary t ON p.products_id=t.products_id WHERE p.products_image <> t.Zdjecie OR (p.products_image IS NOT NULL AND t.Zdjecie IS NULL)


I teraz wszystko śmiga:)
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:45