Witam,
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:

  1. DELIMITER $
  2.  
  3. DROP PROCEDURE IF EXISTS `a`.`b` $
  4. CREATE PROCEDURE `a`.`b` (IN a INT,IN b TINYTEXT)
  5. BEGIN DECLARE indeks INT;
  6. DECLARE i INT;
  7. SET indeks = (SELECT MAX(ID) FROM Tabela1); SET i = 1;
  8. WHILE i <= indeks DO
  9. 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
  10. SELECT * FROM Tabela1 WHERE ID=indeks;
  11. END IF;
  12. SET indeks = indeks - 1;
  13. END WHILE;
  14. END $
  15.  
  16. 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ć ?