mam mały problemik, siędzę już troszkę czasu nad tym i nie wiem jak to wykombinować, potrzebuję stworzyć warunek, który miałby wyglądać mniej więcej tak:
DELIMITER $ DROP PROCEDURE IF EXISTS `a`.`b` $ CREATE PROCEDURE `a`.`b` (IN a INT,IN b TINYTEXT) BEGIN DECLARE indeks INT; DECLARE i INT; SET indeks = (SELECT MAX(ID) FROM Tabela1); SET i = 1; WHILE i <= indeks DO IF ((SELECT COUNT(ID) FROM Tabela2 WHERE ID=indeks) <= a) = (SELECT ID FROM Tabela2 WHERE ID2=(SELECT ID FROM Tabela3 WHERE Nazwa IN (b))) THEN SELECT * FROM Tabela1 WHERE ID=indeks; END IF; SET indeks = indeks - 1; END WHILE; END $ DELIMITER ;
Tabela2 jest wynikiem powiązania relacją wiele-do-wielu tabeli1 (ID) i tabeli3 (ID2), np.:
Tabela2:
+----+-----+
| ID | ID2 |
+----+-----+
| 1 | 1 |
| 1 | 2 |
| 1 | 5 |
| 2 | 4 |
| 3 | 1 |
| 3 | 2 |
+----+-----+
Tabela3:
+----+-----+
| ID | Nazwa |
+----+-----+
| 1 | Bułka |
| 2 | Jabłko |
| 4 | Gruszka |
| 5 | Złoto |
+----+-----+
I teraz chcę wybrać takie ID gdzie suma poszczególnych ID (np. dla ID=1 COUNT będzie równe 3) jest mniejsza bądź równa parametrowi podanemu w procedurze oraz jednocześnie zawiera ID2 równe np. 1,2, które są wybierane na podstawie parametru tekstowego.
Wpisuje w formularzu załóżmy: Jabłko, Bułka i w jakimś tam innym polu wpisuję 3 a on mi zwraca ID z tabeli1 o wartościach 1 i 3.
Przykład:
Wybierz ID gdzie Suma ID <= 3 oraz ID2 = (Wybierz ID z tabeli 3 gdzie nazwa IN ('Jabłko','Bułka));
Procedura powinna mi zwrócić ID nr 1 oraz 3.
Czy ktoś wie jak to zrobić ?