Mam w następstwie dwóch tabel MySQLmysql wybierz ograniczają, dołącz gdzie
- produkty (product_id, nazwa, kategoria)
- products_sizes (product_id, rozmiar)
każdy produkt może mieć wiele rozmiary
muszę dokonać kwerendy
- wybiera produkt na podstawie kategorii i rozmiaru (jeśli ustawiono rozmiar) - np. category = "buty" i rozmiar = "10"
- musi nadal zwracać wszystkie rozmiary produktu, ale tylko wtedy, gdy produkt ma określony rozmiar jak na rozmiarach
- musi jednocześnie ograniczać wyniki produktów do pewnej liczby z przesunięciem
Co mam teraz zapytanie poniżej. Pracuję, ale nie ograniczam się do kategorii i zwracam tylko jeden określony rozmiar (tutaj "10") - potrzebuję wszystkich rozmiarów, ale tylko dla produktów, które mają "10" wśród swoich rozmiarów ...
SELECT products.*
, products_sizes.*
FROM (
SELECT *
FROM products
LIMIT $limit OFFSET $offset
) AS products
LEFT JOIN products_sizes
ON products.products_id = products_sizes.products_id
WHERE products_sizes.size = 10
... a jeśli dodać GDZIE category = 'coś' kwerenda zwraca nic ...
SELECT products.*
, products_sizes.*
FROM (
SELECT *
FROM products
WHERE category = 'shoes'
LIMIT $limit OFFSET $offset
) AS products
LEFT JOIN products_sizes
ON products.products_id = products_sizes.products_id
WHERE products_sizes.size = 10
??
UPDATE: coraz bliżej ...
Po przeczytaniu odpowiedzi teraz mam to:
SELECT *
FROM products AS p
LEFT JOIN products_sizes AS s
ON p.product_id = s.product_id
WHERE s.product_id
IN (SELECT product_id FROM s WHERE size = 10)
AND p.category = 'shoes'
To spełnia dwa pierwsze wymagania Moje pierwsze pytanie to:
- zwraca wyniki ograniczona kategorią i rozmiarem
- Zwraca wszystkie rozmiary dla każdego produktu ct, jeśli jeden z jego rozmiarów jest zgodny z podanym rozmiarem
... ALE nadal muszę ograniczyć wyniki do określonej liczby produktów. Jeśli ustawię limit LIMIT $ na samym końcu zapytania, ograniczy on liczbę zwracanych rozmiarów, a nie liczbę produktów ... Dzięki za dane wejściowe.
daje to błąd "Podkwerenda zwraca więcej niż 1 wiersz" i wydaje się ograniczać liczbę zwracanych rozmiarów, a nie liczbę produktów. Zobacz aktualizację pytania. Nie jestem jeszcze na miejscu, ale użyłem twojego wkładu z tej odpowiedzi. Dzięki – 2083
@AndreasBloch Właśnie przyjrzałem się aktualizacji. Spróbuj użyć LIMIT wewnątrz pod-zapytania. To powinno ograniczyć liczbę product_ids, które pasują do. – Dan
Niestety to nie działa. Zastanawiałem się, gdzie w drugim wierszu kwerendy potrzebna jest klauzula where (intuicyjnie ma to dla mnie największy sens), więc powiedziałbym "Z produktów LIMIT $ limit AS p" - ale to również daje mi błąd – 2083