Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL]Dwie tabele
Forum PHP.pl > Forum > Przedszkole
Puchatek
Witajcie, mam pewną zagwozdkę, z którą nie mogę sobie poradzić.
Posiadam dwie tabele w MySQL.
Pierwsza zawiera dane o produktach - nazwa, opisy, itp.
Druga zawiera stany magazynowe i ceny.
Obie posiadają kolumnę SKU - czyli identyfikator produktu.

Mam do przygotowania dajmy na to stronę z widokiem produktów z danej kategorii.
Chcę zatem, aby było zawarte w niej stronnicowanie oraz żeby wyświetlały się tylko produkty, które mają stan magazynowy i cenę większą od 0.

Na jednej stronie ma znajdować się 28 produktów. Na początku zrobiłem to w taki sposób, że używałem zwykłego SELECTA do wybrania produktów z kategorii, wrzucałem pętle i w niej wykonywałem kolejne zapytanie o stan magazynowy i cenę. Ale robi się wtedy straszny nieład ze względu na liczbę produktów na stronie. Oczywiście udało mi się to rozwiązać PHPem, ale chciałbym całość zawrzeć w jednym pytaniu SQL.

Czyli do tej pory miałem coś takiego:
  1. SELECT * FROM products WHERE catname LIKE "%'.$cname.'%"

Tutaj wjeżdżała pętla While, która przechodzi przez każdy produkt. Następnie sprawdzanie stanów i cen.
  1. SELECT * FROM stocksandprices WHERE sku = "'.$row['sku'].'


Czyli chciałbym te 2 pytania z dwóch różnych tabel zawrzeć w jedno zapytanie.

Próbowałem w taki sposób, ale to chyba nie ma prawa działać wink.gif
  1. SELECT * FROM products, stocksandprices WHERE products.catname LIKE "%'.$cname.'%" AND products.sku = stocksandprices.sku AND NOT stocksandprices.price = 0 AND NOT stocksandprices.stock = 0
SmokAnalog
ORM-y zwykle robią to tak, że wywołują jedno zapytanie do pobrania identyfikatorów, a potem drugie z WHERE foo_id IN (1, 2, 3, 4) itp.

Druga możliwość to zwykły JOIN.
trueblue
Cytat(Puchatek @ 11.08.2020, 09:31:13 ) *
Próbowałem w taki sposób, ale to chyba nie ma prawa działać wink.gif
  1. SELECT * FROM products, stocksandprices WHERE products.catname LIKE "%'.$cname.'%" AND products.sku = stocksandprices.sku AND NOT stocksandprices.price = 0 AND NOT stocksandprices.stock = 0

A dlaczego nie? Jest tu złączenie w WHERE.
Sprawdzałeś czy wynik jest taki jak oczekujesz?
Puchatek
Problem rozwiązany za pomocą WHERE IN smile.gif Dziękuję za pomoc.
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.