Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] WHERE nie ma takiej kolumny
Forum PHP.pl > Forum > Bazy danych > MySQL
propage
Mamy zapytanie powiedzmy:

  1. <?php
  2. Select *, p.price as real_price FROM product p WHERE real_price > '500'
  3. ?>


MySQL twierdzi mi, że nie ma takiej kolumny "real_price" i wywala błąd.

Jednak można po niej sortować
  1. <?php
  2. Select *, p.price as real_price FROM product p ORDER by real_price DESC
  3. ?>


I tutaj mysql nie robi żadnych problemów, może ktoś mi to wytłumaczyć?
nospor
bo przy sortowaniy mysql uwzględnia aliasy, a przy warunkach nie uwzględnia (najpierw jest jakby warunek, a dopiero potem tworzony alias)
propage
to jak sobie z tym poradzić w takim razie ;]
nospor
no nie uzywaj aliasu....
zamiast: WHERE real_price > '500'
daj: WHERE p.price > '500'
nexik
aliasy sa glownie wykorzystywane do funkcji agregujacych a warunki na nich robione sa wykonywane przez having.

podstawy sqla smile.gif

najpierw jest where potem group by potem having potem order by
propage
aliansu muże użyć ponieważ to jest coś tekiego "if(s.special_statsus, s.special_price, p.price) as real_price", wiec alians nie jest tutaj tak sobie.
hm jesli wszstkie wyniki pogrupuje wedle p.product_id to nie wpłynie to w żaden sposób mi na wyniki, tz zwrócone zostaną takie same rekordy, jak wtedy gdybym nie użył GROUP by?

nospor użyte z twojej strony zapytanie:
  1. <?php
  2. set @nr = 0, @id=5, @idprev = 0,@idprevfound=0, @idnext=0,@idnextfound=0;
  3. SELECT @nr:=@nr+1,
  4. if(id<>@id and not @idprevfound, @idprev := id,if(@idprevfound,null,@idprevfound:=1)),
  5. if(id=@id, @idnextfound := 1,if(@idnextfound and not @idnext,@idnext := id, null)) FROM tabela1 order by pole;
  6. SELECT @idprev prev, @idnext next;
  7.  
  8. zmodyfikowane:
  9.  
  10. set @nr = 0, @id=5, @idprev = 0,@idprevfound=0, @idnext=0,@idnextfound=0;
  11. SELECT if(s.promotion_status, s.promotion_price, p.promotion_price) as real_price @nr:=@nr+1,
  12. if(id<>@id and not @idprevfound, @idprev := id,if(@idprevfound,null,@idprevfound:=1)),
  13. if(id=@id, @idnextfound := 1,if(@idnextfound and not @idnext,@idnext := id, null)) FROM product p join left ... order by real_price;
  14. SELECT @idprev prev, @idnext next;
  15. ?>


Właśnie też nie zwraca mi dobrych wyników (tylko w momencie kiedy sortowanie jest po real_price, w kazdym innym wypadku, działa dobrze), jeśli, chociaz tutaj juz nie było użytego real_prce w WHERE tylko, a jedynie w ORDER by, dziwne...
nospor
as real_price @nr:=@nr+1,
chyba zjadles przecinek:
as real_price, @nr:=@nr+1,

pozatym powinno dobrze sortowac. nieraz stosowalem do sortowania wynik IF i bylo ok
propage
Hm jednak te zapytanie, nie działa u mnie prawidłowo tz, zawsze zwraca mi takie same wartości prev i next dla każdego elementu, nie zależnie jakie sortowanie ustawie i metode.

I zamodyfikowane zapytanie o prev i next

  1. <?php
  2. SELECT DISTINCT p.product_id as product_id, p.product_name, p.vat_id, if (pro.promotion_status, pro.promotion_price, p.product_price) as real_price, p.product_onStock, p.product_content, p.product_image, pro.promotion_price, p.product_price, pro.promotion_status, p.product_url, p.product_content, p.product_show, @nr:=@nr+1, if( p.product_id <>@id and not @idprevfound, @idprev := p.product_id, if(@idprevfound,null,@idprevfound:=1) ), if( p.product_id = @id, @idnextfound := 1, if(@idnextfound and not @idnext, @idnext := p.product_id, null) ) FROM product p left join product_2_category p_2_c on (p_2_c.product_id = p.product_id) left join category c on (c.category_id = p_2_c.category_id) left join promotion pro on (pro.product_id = p.product_id ) WHERE p.product_show = 1 AND c.category_id IN (3, 3) order by p.product_name DESC
  3. ?>


co bym nie wstawił w order by zawsze dostane takie same wartości next i prev. Gdzie jest błąd ?
nospor
widac tak sie zlozylo, ze dla kazdego pola sortuje tak samo smile.gif

No ciezko cos powiedziec bez danych i przy takiej sieczce jak u ciebie winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.