Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL]Problem z aliasem utworzonej kolumny
adgad
post
Post #1





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 14.04.2010

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


Witam,
mam problem z zapytaniem w sql-u. Mianowicie wygląda ono tak:
  1. SELECT users.*, SUM(CASE WHEN c.id IS NULL THEN ...END) isComment
  2. FROM (users)
  3. LEFT JOIN comments ON users.id = comments.user_id
  4. WHERE `isComment` = 0
  5. GROUP BY users.id

to przykład zapytania wymyślony na szybko. Problem polega na tym że w zależności czy tworzona kolumna jest 1 czy zero musze ustawić warunek. Robię to w php, na wzór:
  1. if($where['comments']==1)
  2. $this->db->where('isComment >0')
  3. if($where['comments']==0)
  4. $this->db->where('isComment =0')

Problem w tym że mam błąd:
  1. Unknown COLUMN 'isComment' IN 'where clause'

pytanie zatem jak odwołać się do tej kolumny?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Nie chodzi o to, że brakuje aliasu, bo go nie brakuje. Zapisy `column` `alias` oraz `column` AS `alias` są równoważne.

Nie chodzi również o to, że "alias" w WHERE jest niewidoczny, bo to nie do końca prawda. Alias jest niewidoczny w WHERE ze względu na to, że używasz funkcji agregującej SUM w połączeniu z grupowaniem GROUP BY po kolumnie id, przy czym grupowanie odbywa się na końcu. Zapytanie najpierw szuka wierszy spełniających warunek WHERE `isComment`= 0 (ta kolumna w tej chwili nie istnieje stąd błąd), a dopiero później grupuje wyniki i sumuje wartości (dopiero wtedy "powstaje" kolumna `isComment` i dlatego w WHERE jej "nie widać"). HAVING natomiast działa na pogrupowanych już rekordach.

Poza tym zaleca się w tym przypadku w ramach optymalizacji denormalizację bazy danych i dodanie kolumny przechowującej sumę w danej tabeli.

Ten post edytował mortus 12.04.2013, 07:32:03
Go to the top of the page
+Quote Post

Posty w temacie


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: 7.10.2025 - 04:06