Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlenie kolumny w zależności od wyniku CASE
Forum PHP.pl > Forum > Bazy danych
raczkowski1
Cytat
Witam
Chcę przy select dodać kolumnę która będzie zawierała wartość najmniejszą z dwóch innych kolumn.
Wyprodukowałem takie zapytanie:
  1. SELECT
  2. id, `time`, RememberTime ,
  3. CASE
  4. WHEN `time`<=RememberTime OR RememberTime IS NULL then `time`
  5. WHEN `time`>RememberTime then RememberTime
  6. ELSE 0
  7. END AS sortime
  8. FROM clients
  9. WHERE 1=1 AND ((RememberTime IS NOT NULL OR `time`<=1376495278) AND STATUS=3)
  10. ORDER BY `sortime` DESC, `id` DESC LIMIT 0,20


Wynik tego zapytania:
Cytat

+-------+------------+--------------+------------+
| id | time | RememberTime | sortime |
+-------+------------+--------------+------------+
| 18181 | 1375616418 | NULL | 1375616418 |
| 18168 | 1404983104 | 1375135200 | 1375135200 |
| 18166 | 1404983104 | 1374616800 | 1374616800 |
| 18174 | 1374616418 | 1374703200 | 1374616418 |
| 18171 | 1404983104 | 1374530400 | 1374530400 |
| 18170 | 1404983104 | 1374530400 | 1374530400 |
| 18147 | 1690464424 | 1374444000 | 1374444000 |
| 18172 | 1404983104 | 1373875200 | 1373875200 |
+-------+------------+--------------+------------+
8 rows in set (0.06 sec)


Ale gdy za komentuję jeden warunek WHEN:
  1. SELECT
  2. id, `time`, RememberTime ,
  3. CASE
  4. WHEN `time`<=RememberTime OR RememberTime IS NULL then `time`
  5. -- WHEN `time`>RememberTime then RememberTime
  6. ELSE 0
  7. END AS sortime
  8. FROM clients
  9. WHERE 1=1 AND ((RememberTime IS NOT NULL OR `time`<=1376495278) AND STATUS=3)
  10. ORDER BY `sortime` DESC, `id` DESC LIMIT 0,20


Wynik zapytania wygląda ok:
Cytat
+-------+------------+--------------+------------+
| id | time | RememberTime | sortime |
+-------+------------+--------------+------------+
| 18181 | 1375616418 | NULL | 1375616418 |
| 18174 | 1374616418 | 1374703200 | 1374616418 |
| 18172 | 1404983104 | 1373875200 | 0 |
| 18171 | 1404983104 | 1374530400 | 0 |
| 18170 | 1404983104 | 1374530400 | 0 |
| 18168 | 1404983104 | 1375135200 | 0 |
| 18166 | 1404983104 | 1374616800 | 0 |
| 18147 | 1690464424 | 1374444000 | 0 |
+-------+------------+--------------+------------+


Nie wiem jak rozwiązać problem, może ktoś podpowie?
Pozdrawiam

edycja
----------------------------
Oświeciło mnie, obie kolumny były różnego typu i dlatego błędne dane wyświetlał.
Teraz działa

Pozdrawiam
timon27
Nie możesz po prostu użyć funkcji LEAST?
programista28
http://athlan.pl/mysql-case-when-then-else-end/


ten artykuł powinien ci pomóc


powodzenia
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.