Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z fitowaniem po aliasach w zapytaniu
Forum PHP.pl > Forum > Bazy danych > MySQL
Mugol
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?
luckyps
  1. SELECT a.* FROM
  2. (
  3. zapytanie
  4. ) a
  5. WHERE..... i tu juz po aliasach mozesz jechac

Mugol
Dobra smile.gif a moge prosic troszke jasniej:) Jak chłopu na granicy:)
alegorn
  1. WHERE alias.kolumna = costam
luckyps
  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'

Mugol
Dziekuje zacny człowieku:) Trosze musiałem zmienic:) (wyrzuciłem cene poza 2 nawias) i chyba działa:)
Mogę w spokoju leczyc kaca:)
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.