Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyświetlenie kolumny w zależności od wyniku CASE
raczkowski1
post
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 26.07.2007

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


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

Ten post edytował raczkowski1 1.08.2013, 14:04:01
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
timon27
post
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


Nie możesz po prostu użyć funkcji LEAST?
Go to the top of the page
+Quote Post
programista28
post
Post #3





Grupa: Zarejestrowani
Postów: 88
Pomógł: 2
Dołączył: 14.05.2011

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


http://athlan.pl/mysql-case-when-then-else-end/


ten artykuł powinien ci pomóc


powodzenia
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 15:58