Mam takie pytanie mam sobie zapytanie które pobiera od użytkownika substancje do wyszukania i można też wpisać dawkę produkty wyszukuje za pomocą whereIn i potem daje normalne where dawka dla każdego produktu.
Ja zamierzam zmodyfikować to tak, że teraz dla każdego produktu będzie inna dawka(czyli każdy produkt będzie miał swoją dawkę do wyszukania) w zapytaniu w formularzu ja wam nie daję kodu źródłowego bo chcę, żebyście mnie nakierowali czego ma użyć w mysql.
Czy da się to zrobić w mysql ?
Ciężko się to czyta, jeszcze ciężej to zrozumieć.
Ale skoro dawka przypisana jest do substancji to przecież jakiś join
powinien załatwić sprawę.
Chodzi o to, że dawka jest przypisana do pojedyńczego rekordu, a ten rekord ma pole o nazwie idProduct.
No i to właśnie join łączy takie tabele.
Daj może strukturę tabeli chociaż. Będzie łatwiej.
Jeśli dawka jest przypisana do pojedynczego rekordu, a ten rekord ma pole o nazwie idProduct, możesz dostosować zapytanie SQL w następujący sposób:
SELECT produkty.nazwa, dawki.dawka
FROM produkty
JOIN dawki ON produkty.id = dawki.idProduct
WHERE produkty.nazwa IN ('substancja1', 'substancja2', 'substancja3')
To zapytanie zwróci nazwę każdego produktu i odpowiadającą mu dawkę dla produktów o nazwach 'substancja1', 'substancja2', 'substancja3'.
Chodzi o to, że dawka to jest wartość taką jak się używa w where.
A ja miałem dać strukture tabeli
tabela wzięcia
- id dawka id_product
- 1 12 1
- 2 500 1
- 3 600 2
tabela produktów
- id nazwa
- 1 produktA
- 2 produktB
I teraz w formularzu użytkownik sobie zarzyczy
przeszukać tabele wpisując
nazwę produktu produktA dawka 500
nazwa produktu produktB dawka 600
To mu powinno wyszukać 2 i 3 rekord i pierwszej tabeli.
Oto zapytanie SQL, które łączy obie tabele i dodaje warunki WHERE dla nazwy produktu i dawki
SELECT wziecia.id, produkty.nazwa, wziecia.dawka
FROM wziecia
JOIN produkty ON wziecia.id_product = produkty.id
WHERE (produkty.nazwa = 'produktA' AND wziecia.dawka = 500)
OR (produkty.nazwa = 'produktB' AND wziecia.dawka = 600)
To zapytanie zwróci ID, nazwę produktu i dawkę dla rekordów, które spełniają podane warunki. W tym przypadku zwróci rekordy 2 i 3 z tabeli wziecia.
Fakt wydało się to prostrze niż myślałem, a ja sobie to komplikowałem.
Można też użyć LEFT JOIN na wypadek, jeśli nie będzie produktów o danym ID