2012-05-22 26 views
5

Na przykład, jeśli queue_watch pokazuje 0, chcę, aby faktyczne wyjście mysql powiedziało "Nie", inaczej "tak". Zmiana schematu nie jest opcją.Jak zmienić wyjście mysql na podstawie wartości

SELECT user.user_name, queue.queue_name, queue_access.queue_access, 
    queue_access.queue_watch 
FROM queue_access 
INNER JOIN user ON user.user_id = queue_access.user_id 
INNER JOIN queue ON queue.queue_id = queue_access.queue_id 
WHERE queue_access <> '' OR queue_watch = 1 
ORDER BY user_name; 

SQL działa na co muszę, ale chcę wiedzieć, czy zmiany wyjścia przy użyciu SQL zamiast PHP jest możliwe. Ponadto, możliwe jest grupowanie wszystkich nazw kolejek w jednym wierszu dla każdej nazwy użytkownika, więc nie muszę mieć zwróconych 153 wierszy.

Dzięki

+0

"Ponadto, jest to możliwe do grupy ..." Proszę spojrzeć 'GROUP BY' w instrukcji. Możesz również spojrzeć na 'GROUP_CONCAT'. I proszę nie zadawać dwóch zupełnie niepowiązanych pytań w jednym pytaniu. –

+0

Wiem, przepraszam za porwanie dwóch części pytania, ale ponieważ był związany z tym samym zapytaniem, myślałem, że równie dobrze. Pomyślałem o GROUP BY, ale problemem jest grupa zwracająca jednego użytkownika i jedną nazwę kolejki, ponieważ jeden użytkownik może należeć do wielu kolejek - więc chce tego w rodzaju listy, ale nie wiem, czy jest to możliwe –

+0

przykro mi, pomyślałem to, grupa na dole, z group_concat w selekcji to zrobiło ... –

Odpowiedz

8

To nie nad głową. Lepiej jest zrobić to w zapytaniu, jak sądzę.

Spróbuj tego -

SELECT user.user_name, queue.queue_name, queue_access.queue_access, 
     IF(queue_access.queue_watch = 0, 'No', 'Yes') 
FROM queue_access 
INNER JOIN user ON user.user_id = queue_access.user_id 
INNER JOIN queue ON queue.queue_id = queue_access.queue_id 
WHERE queue_access <> '' OR queue_watch = 1 
ORDER BY user_name; 
+0

Ten naprawdę rozwiązał to, czego potrzebowałem (zobaczyłem to szczerze), a ja właśnie dodałem, żeby zmienić nazwę kolumny. Dziękujemy –

+0

Jesteś mile widziany. – JHS

4

Można użyć standardowego CASE wyraz. Istnieją dwa nieco inne sposoby napisania wyrażenia CASE.

Prosta sprawa wyrażenie:

SELECT 
    CASE queue_access.queue_watch 
     WHEN 0 THEN 'No' 
     ELSE 'Yes' 
    END AS your_alias, 
    ... 

Szukano case wyrażenie:

SELECT 
    CASE WHEN queue_access.queue_watch = 0 THEN 'No' ELSE 'Yes' END AS your_alias, 
    ... 

Albo można użyć MySQL specyficzne IF konstrukt:

SELECT 
    IF(queue_access.queue_watch, 'Yes', 'No') AS your_alias, 
    ... 

może warto rozważyć, co powinno się zdarzyć, jeśli Twoja wartość jest inna niż 0 lub 1.

+0

@MarcusAdams: Przepraszam, naprawdę zamierzałem to dodać. Właśnie testowałem moją odpowiedź w SQL Fiddle tylko po to, aby upewnić się, że wszystko jest w porządku, ale ku mojemu zaskoczeniu nie zadziałało. Nie byłam pewna, czy źle zapamiętałam składnię, coś pomyłkowo lub czy był błąd w SQL Fiddle. Wydaje się, że to [błąd w Fiddle SQL] (http://sqlfiddle.com/#!2/d41d8/711). –

+0

Dobra robota pokazująca standardowy sposób ANSI za pomocą 'CASE' oraz bardziej zwięzłą metodę MySQL' IF'. –

+0

Podobają mi się case.as metody, ale gdzie umieścić sprawę, dostaję błąd sql, bez względu na to, gdzie umieścić go w kwerendzie. –

Powiązane problemy