Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z fitowaniem po aliasach w zapytaniu
Mugol
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 3.02.2010

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


Witam

Mam taki problem:
Mam tabele z produktami i tabelę gdzie są przetrzymywane opcje tych produktów wraz z ceną.

stworzyłem takie zapytanie

  1. $podzapytanie_5 = "SELECT MIN(cena) FROM rozmiary ";
  2. $podzapytanie_5 .= "WHERE rozmiary.id_produkt = produkty.id_produkt ";
  3.  
  4. $podzapytanie_6 = "SELECT MIN(cena_promocyjna) FROM rozmiary ";
  5. $podzapytanie_6 .= "WHERE rozmiary.id_produkt = produkty.id_produkt ";
  6.  
  7. $query = "SELECT produkty.* , producenci.nazwa, (".$podzapytanie_5.") AS cena, (".$podzapytanie_6.") AS cena_promocyjna ";
  8. $query .= "FROM produkty INNER JOIN producenci ON produkty.producent = producenci.id_producent ";
  9. $query .= "WHERE ((produkty.id_dzial = '".$id_dzial."' AND produkty.id_kategoria = '".$id_kategoria."') OR produkty.id_produkt = ANY (".$podzapytanie.")) ";
  10. $query .= "AND produkty.id_dzial = ANY (".$podzapytanie_2.") AND produkty.id_kategoria = ANY (".$podzapytanie_1.") AND produkty.ukryj = 0 AND ";
  11. $query .= "cena_promocyjna != '0' AND ";
  12. $query = rtrim( $query, ' AND' );
  13. $query .= "; ";


jest tam jescze sortowanie i porcjowanie ale to juz nie isttotne.

ważne jest ze przy próbie odczytania wywala mi błąd
  1. Unknown column 'cena_promocyjna' in 'where clause'
  2.  
  3.  
  4. SELECT produkty.* , producenci.nazwa, (SELECT MIN(cena) FROM rozmiary WHERE rozmiary.id_produkt = produkty.id_produkt ) AS cena, (SELECT MIN(cena_promocyjna) FROM rozmiary
  5. WHERE rozmiary.id_produkt = produkty.id_produkt ) AS cena_promocyjna
  6. FROM produkty INNER JOIN producenci ON produkty.producent = producenci.id_producent
  7. WHERE ((produkty.id_dzial = '4' AND produkty.id_kategoria = '13') OR produkty.id_produkt = ANY (SELECT id_produkt FROM produktkategoria WHERE produktkategoria.id_kategoria = '13' ))
  8. AND produkty.id_dzial = ANY (SELECT id_dzial FROM produkty_dzialy WHERE produkty_dzialy.ukryj = 0 )
  9. AND produkty.id_kategoria = ANY (SELECT id_kategoria FROM produkty_kategorie WHERE produkty_kategorie.ukryj = 0 )
  10. AND produkty.ukryj = 0 AND cena_promocyjna != '0' ORDER BY (( CASE WHEN cena_promocyjna != 0 THEN cena_promocyjna ELSE cena END )) ;


Czyli nie da się przefitrowac wyniku po aliasie??
Są na to jakies sposoby?
Go to the top of the page
+Quote Post
luckyps
post
Post #2





Grupa: Zarejestrowani
Postów: 153
Pomógł: 41
Dołączył: 28.06.2011
Skąd: Częstochowa

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


  1. SELECT a.* FROM
  2. (
  3. zapytanie
  4. ) a
  5. WHERE..... i tu juz po aliasach mozesz jechac

Go to the top of the page
+Quote Post
Mugol
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 3.02.2010

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


Dobra (IMG:style_emoticons/default/smile.gif) a moge prosic troszke jasniej:) Jak chłopu na granicy:)
Go to the top of the page
+Quote Post
alegorn
post
Post #4





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


  1. WHERE alias.kolumna = costam
Go to the top of the page
+Quote Post
luckyps
post
Post #5





Grupa: Zarejestrowani
Postów: 153
Pomógł: 41
Dołączył: 28.06.2011
Skąd: Częstochowa

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


  1. SELECT a.* FROM
  2. (
  3.  
  4. SELECT produkty.* , producenci.nazwa, (SELECT MIN(cena) FROM rozmiary WHERE rozmiary.id_produkt = produkty.id_produkt ) AS cena, (SELECT MIN(cena_promocyjna) FROM rozmiary
  5. WHERE rozmiary.id_produkt = produkty.id_produkt ) AS cena_promocyjna
  6. FROM produkty INNER JOIN producenci ON produkty.producent = producenci.id_producent
  7. WHERE ((produkty.id_dzial = '4' AND produkty.id_kategoria = '13') OR produkty.id_produkt = ANY (SELECT id_produkt FROM produktkategoria WHERE produktkategoria.id_kategoria = '13' ))
  8. AND produkty.id_dzial = ANY (SELECT id_dzial FROM produkty_dzialy WHERE produkty_dzialy.ukryj = 0 )
  9. AND produkty.id_kategoria = ANY (SELECT id_kategoria FROM produkty_kategorie WHERE produkty_kategorie.ukryj = 0 )
  10. AND produkty.ukryj = 0 AND cena_promocyjna != '0' ORDER BY (( CASE WHEN cena_promocyjna != 0 THEN cena_promocyjna ELSE cena END ))
  11.  
  12. ) a
  13. WHERE
  14. a.cena_promocyjna != '0'

Go to the top of the page
+Quote Post
Mugol
post
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 3.02.2010

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


Dziekuje zacny człowieku:) Trosze musiałem zmienic:) (wyrzuciłem cene poza 2 nawias) i chyba działa:)
Mogę w spokoju leczyc kaca:)
Go to the top of the page
+Quote Post

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: 23.08.2025 - 07:36