Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z zapytaniem - Wyciągnięcie produktów wg. atrybutów, Wyciągnięcie produktów wg. atrybutów
Gaw
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 27.11.2006

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


Witam serdecznie,

mam problem z wyciągięciem produktów wg. atrybutów.

Jeden produkt ma wiele atrybutów - chcę zrobić filtr wyszukiwania i tak np. chcę znaleść produkt, który jest w kolorze niebieskim i w rozmiarze S.

Próboję z zapytaniem:

  1. SELECT `Item`.`id`, `Item`.`quantity`, `Item`.`price`, `Item`.`minimal_price`, `Item`.`name`, `Item`.`description`, `Item`.`category_id`, `Item`.`is_active`, `Item`.`flag_id`, `Item`.`is_deleted`, `Item`.`expired`, `Item`.`created`, `Item`.`updated`, `Item`.`authake_users_id`, `Item`.`slug`, `Item`.`brand_id`, `Item`.`brand`, `Category`.`id`, `Category`.`parent_id`, `Category`.`lft`, `Category`.`rght`, `Category`.`name`, `Category`.`slug`, `Category`.`created`, `Category`.`updated`, `Category`.`is_active`, `Category`.`is_deleted`, `Category`.`sort` FROM `items` AS `Item` INNER JOIN `attributes_items` AS `AttributesItem` ON (`AttributesItem`.`item_id` = `Item`.`id`) LEFT JOIN `attributes` AS `Attribute` ON (`Attribute`.`id` = `AttributesItem`.`item_id`) LEFT JOIN `categories` AS `Category` ON (`Item`.`category_id` = `Category`.`id`) WHERE `AttributesItem`.`attribute_id` = 3 AND `AttributesItem`.`attribute_id` = 20 GROUP BY `Item`.`id` ORDER BY `Item`.`created` ASC LIMIT 25


ale nie zwraca mi w ogóle żadnego rekordu. cala sprawa rozchodzi się o:
  1. WHERE `AttributesItem`.`attribute_id` = 3 AND `AttributesItem`.`attribute_id` = 20


nie rozumiem dlaczego to nie działa. jeśli dam warunek OR to wyszuka mi produkt albo niebieski albo w rozmairze S, a ja potrzebuje produkt dokładnie spełniający te 2 kryteria.

Proszę o podpowiedź jak to zrobić.

Pozdrawiam


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
YaQzi
post
Post #2





Grupa: Zarejestrowani
Postów: 94
Pomógł: 31
Dołączył: 12.10.2008
Skąd: WAT

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


nie działa bo tutaj:

"`AttributesItem`.`attribute_id` = 3 AND `AttributesItem`.`attribute_id` = 20"
chcesz wyciągnąć rekord, dla którego attribute_id jest jednocześnie równy 3 i 20 (IMG:style_emoticons/default/smile.gif) więc nic dziwnego, że niczego nie znajduje.
Go to the top of the page
+Quote Post
vermis
post
Post #3





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

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


Tak na szybko przychodzą mi następujące rozwiązania:
- Dołącznie tabeli z atrybutami 2 razy raz dla koloru drugi raz dla rozmiaru
- możesz policzyć ile rekordów z atrybutami się dopasowało masz do wyboru 0, 1 lub 2 interesuje cię tylko 2
- możesz użyć podzapytań które sprawdzą czy istnieje wpis w tabeli z atrybutami dla koloru i osobno dla rozmiaru.

Zasadniczo struktura bazy, którą przyjąłeś jest dobra ze względu na możliwość dodawania dowolnej ilości atrybutów, ale wyszukiwanie po nich jest mało efektywne.
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%)
-----


dołącz tabelę atrybut dwa razy, z aliasem na kolor i rozmiar

j.
Go to the top of the page
+Quote Post
Gaw
post
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 27.11.2006

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


heh, jakie to okazało się proste (IMG:style_emoticons/default/smile.gif)

tabela z alisami (IMG:style_emoticons/default/smile.gif)

  1. SELECT `Item`.`id`, `Item`.`quantity`, `Item`.`price`, `Item`.`minimal_price`, `Item`.`name`, `Item`.`description`, `Item`.`category_id`, `Item`.`is_active`, `Item`.`flag_id`, `Item`.`is_deleted`, `Item`.`expired`, `Item`.`created`, `Item`.`updated`, `Item`.`authake_users_id`, `Item`.`slug`, `Item`.`brand_id`, `Item`.`brand`, `Category`.`id`, `Category`.`parent_id`, `Category`.`lft`, `Category`.`rght`, `Category`.`name`, `Category`.`slug`, `Category`.`created`, `Category`.`updated`, `Category`.`is_active`, `Category`.`is_deleted`, `Category`.`sort` FROM `items` AS `Item` INNER JOIN `attributes_items` AS `Kolor` ON (`Kolor`.`item_id` = `Item`.`id`) INNER JOIN `attributes_items` AS `Rozmiar` ON (`Rozmiar`.`item_id` = `Item`.`id`) LEFT JOIN `categories` AS `Category` ON (`Item`.`category_id` = `Category`.`id`) WHERE `Kolor`.`attribute_id` = 3 AND `Rozmiar`.`attribute_id` = 20 GROUP BY `Item`.`id` ORDER BY `Item`.`created` ASC LIMIT 25


Dzięki za naprowadzenie
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: 25.08.2025 - 05:44