Czy da się zastosować 'as' na kolumnach przy COUNT i GROUP BY?

0
SELECT COUNT(IM.STATUS_ID) AS `COUNT`, `IMS`.`NAME` 
FROM `IMAPMAIL` AS `IM` 
INNER JOIN `IMAPMAIL_STATUS` AS `IMS` 
ON IMS.ID = IM.STATUS_ID 
WHERE (IM.DELETED != 1) 
GROUP BY `IM`.`STATUS_ID`

Wynikiem czego w PHP dostaję taką oto tablicę:

ARRAY (SIZE=2)
  0 => 
    ARRAY (SIZE=2)
      'COUNT' => STRING '109' (LENGTH=3)
      'NAME' => STRING 'NEW' (LENGTH=3)
  1 => 
    ARRAY (SIZE=2)
      'COUNT' => STRING '28' (LENGTH=2)
      'NAME' => STRING 'IN PROGRESS' (LENGTH=11)

Chciałbym zamiast klucza count otrzymać nazwę statusu, ale nie bardzo wiem jak to zrobić w sql'u. Normalnie to AS zalatwia sprawę, ale nie wyobrażam sobie jak to wwalić do COUNT i GROUP BY. Proszę o jakieś wskazówki.

0

Nie wiem czy wam się to przyda, ale oto dwie tabele.

+------------------+-----------------------------+------+-----+----------+----------------+
| Field            | Type                        | Null | Key | Default  | Extra          |
+------------------+-----------------------------+------+-----+----------+----------------+
| imapmail_id      | int(11)                     | NO   | PRI | NULL     | auto_increment |
| status_id        | tinyint(4)                  | YES  | MUL | 1        |                |
| user_id          | int(11)                     | YES  | MUL | NULL     |                |
| crmreciever_id   | int(11)                     | YES  | MUL | NULL     |                |
| crmreciever_type | varchar(64)                 | YES  | MUL | NULL     |                |
| crmclient_id     | int(11)                     | YES  |     | NULL     |                |
| imap_account_id  | int(11)                     | YES  | MUL | NULL     |                |
| unique_id        | int(11)                     | YES  | MUL | NULL     |                |
| imap_folder      | varchar(255)                | NO   |     | NULL     |                |
| creation_date    | datetime                    | NO   |     | NULL     |                |
| type             | enum('incoming','outgoing') | YES  |     | incoming |                |
| sender           | varchar(255)                | YES  |     | NULL     |                |
| reciever         | varchar(255)                | YES  |     | NULL     |                |
| title            | text                        | YES  | MUL | NULL     |                |
| deleted          | tinyint(1)                  | NO   | MUL | 0        |                |
+------------------+-----------------------------+------+-----+----------+----------------+

+----+-------------+-------+---------+
| id | name        | order | deleted |
+----+-------------+-------+---------+
|  1 | New         |     1 |       0 |
|  2 | In progress |     2 |       1 |
|  3 | Faultnotice |     3 |       0 |
|  4 | Closed      |     4 |       0 |
+----+-------------+-------+---------+
0

Nie do końca zrozumiałem co chcesz uzyskać. Czy możesz to jakoś jaśniej opisać?

0

Mam tabele maili i dla każdego maila jeden z 4 statusów. Chcę policzyć ilość poszczególnych statusów. Z tym nie ma problemu tylko, że otrzymuję to nie w takim formacie w jakim bym chciał. Może to nie pytanie do bazodanowców tylko do kogoś ze znajomością zenda.. w każdym razie interesuje mnie taki output:

ARRAY (SIZE=2)
  'NEW' => STRING '109' (LENGTH=3)
ARRAY (SIZE=2)
  'IN PROGRESS' => STRING '28' (LENGTH=2)

Zamiast tego co wkleiłem wyżej. W zendzie uzyskuje się to przez aliasy kolumn. Chciałbym tak jakby zamiast SELECT COUNT(IM.STATUS_ID) AS COUNT`` COUNT wrzucić tutaj odpowiednie statusy z tabeli statusów :D Czyli tak jakby dostać chyba 4 kolumny z jednym wierszem i w każdej komórce liczba.

0

Rozumiem, zenda nie znam ale finalnie nie podałeś co to za baza danych ale w Oracle (i pewnie w innych też) istnieje funkcja

PIVOT

czyli robisz sobie selecta z nazwą i ilością grupując odpowiednio. To ci daje 4 rekordy wrzucasz w pivota i masz 1 rekord z 4 kolumnami :)

0

dla takich wyników gra niewarta świeczki - przecież masz dokładnie to co chciałeś tylko trzeba to odpowiednio wyświetlić

0

Wiem, ciekawy byłem czy jest to możliwe w jakiś prosty sposób do zrobienia. Problem rozwiązany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1