Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z porównaniem dwóch kolumn typu varchar
Forum PHP.pl > Forum > Bazy danych > MySQL
neon85
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.

Mchl
A są wiersze spełniające warunek złączenia?
neon85
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.
Mchl
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' = ...
neon85
Dla oby dwóch mam latin2_general_ci, poza tym,
najczęsciej jest to porównanie jakiegośc stringu z wartością null
Mchl
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
phpion
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).
neon85
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:)
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-2025 Invision Power Services, Inc.