Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][SQL]Dwie tabele
Puchatek
post 11.08.2020, 08:31:13
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 4.07.2019

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


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
Go to the top of the page
+Quote Post
SmokAnalog
post 11.08.2020, 09:17:58
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


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.
Go to the top of the page
+Quote Post
trueblue
post 11.08.2020, 09:28:07
Post #3





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


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?


--------------------
Go to the top of the page
+Quote Post
Puchatek
post 20.08.2020, 12:53:18
Post #4





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 4.07.2019

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


Problem rozwiązany za pomocą WHERE IN smile.gif Dziękuję za pomoc.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 07:00