Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybór wierszy spełniających wszystkie wymagania
Forum PHP.pl > Forum > Bazy danych > MySQL
Mugol
Witam
Jestem raczej poczatkujący w mysql.

Mam mały problem:
Mam tabele w której mam pola id_produkt i id_atrybut.
W której przypisuje do produktu atrybut. Każdy produkt może mieć kilka atrybutów.

czyli id_produkt może wystąpić kilkukrotnie.

Teraz na podstawie zaznaczonych w wyszukiwarce opcji (atrybutow) chciałbym wybrac odpowiednie id_produktu spełniające wszystkie zaznaczone założenia.

I tutaj pojawia się problem;/

z formularza dostaje tablice $atrybuty

rozbijam ją na stringa

$atr = implode(", ", $atrybuty);

probowałem tak ():

  1. SELECT id_produkt FROM produkt_atrybut WHERE id_atrybut = ALL ($atr) GROUP BY id_produkt;


ale baza zwraca bład przy ALL na próbę probowałem ANY ale ten sam bład. Tak jak by w nawias nie można było wsadzić cyfr tylko podzapytanie.

Probowałem też przerobić to zapytanie:
  1. $podzapytanie = "SELECT id_produkt ";
  2. $podzapytanie .= "FROM produkt_atrybut ";
  3. $podzapytanie .= "WHERE ";
  4.  
  5. foreach ($atrybuty as $row) {
  6. $podzapytanie .= "id_atrybut = '".$row."' AND ";
  7. }
  8.  
  9. $podzapytanie = rtrim( $podzapytanie, ' AND' );
  10.  
  11. $podzapytanie .= " GROUP BY id_produkt ";
  12. $podzapytanie .= ";";


Ale Z AND nie daje wyników dla więcej niz jednej opcji a z OR nie filtruje wystarczjąco.

Będę wdzięczny za jakąś podpowiedź.
mortus
ALL, ANY używamy z podzapytaniami, natomiast Ty możesz użyć IN:
  1. SELECT id_produkt FROM produkt_atrybut WHERE id_atrybut IN ($atr) GROUP BY id_produkt
Mugol
Ale robiąc z IN znowu dostaję za dużo wynikow.
Na przykład:
Mam produkt ktory ma atrybuty: zielony, żółty i drugi produkt o atrybutach zielony, niebieski.
Przy wyborze zielonego zwraca 2 wyniki i to jest ok ale jesli zaznaczy sie wybór zielony i zółty to nadal zwraca 2 wyniki a powinien tylko 1 :/

Dodałem HAVING

SELECT id_produkt FROM produkt_atrybut WHERE id_atrybut IN ($atr) GROUP BY id_produkt HAVING COUNT(id_produkt) = count($atrybuty);

Niby zwarca teraz dobrze ale musze to jescze potestowac.
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.