![]() |
![]() ![]() |
![]() |
![]()
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:
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:
Problem w tym że mam błąd:
pytanie zatem jak odwołać się do tej kolumny? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 41 Pomógł: 9 Dołączył: 8.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 14.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
To nie pomaga. Próbowałem tak zanim napisałem, As z tego co wyczytałem nie jest obowiązkowe.
A może da się to zastąpić klauzulą Having albo inną ![]() Problem rozwiązany, rozwiązanie to użycie having, gdyż alias w where nie jest widoczny, może być użyty w having, order by, group by. @Thorang Hoog otrzymujesz pomógł za chęć pomocy jako jedyny ![]() Ten post edytował adgad 11.04.2013, 15:55:29 |
|
|
![]()
Post
#4
|
|
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 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 14.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ok, dzięki za wytłumaczenie, ale dopytam.
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. Rozumiem że ta kolumna nie istnieje w momencie wywołania tego przypadku. Mam rozumieć że jeśli zastosuje alias do istniejącej kolumny to on będzie widoczny w warunku where? Bo z tego co wyczytałem to alias(dla pola-kolumny) jest widoczny w having, order by i group by. Taką informację dostałem również na innym forum, dlatego chciałbym to wyjaśnić żeby wiedzieć "co mogę" a co nie w zapytaniu użyć. Poza tym zaleca się w tym przypadku w ramach optymalizacji denormalizację bazy danych i dodanie kolumny przechowującej sumę w danej tabeli. W przypadku do którego chciałem użyć zapytanie, baza jest rozbudowana, denormalizacja jej będzie czasochłonna. Ten post edytował adgad 12.04.2013, 09:09:59 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 41 Pomógł: 9 Dołączył: 8.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wszystkie informacje jakie znalazłem potwierdzają, że w WHERE nie można używać aliasów
MySQL 5.5.16 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Fakt, co zresztą wydaję się logiczne... Nie można używać aliasów w WHERE i trzeba użyć nazwy kolumny! Przepraszam za wprowadzanie w błąd... W głowie miałem cały czas takie rozwiązanie:
I stąd nieporozumienie. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 07:50 |