Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z procedura
Forum PHP.pl > Forum > Bazy danych > MySQL
quality
Witam.
mam taka procedure:

  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS getRandomRecords$$
  3. CREATE PROCEDURE getRandomRecords(IN cnt INT, IN tablein VARCHAR(255))
  4.  
  5. BEGIN
  6. DROP TEMPORARY TABLE IF EXISTS randomRecords;
  7. CREATE TEMPORARY TABLE randomRecords ( `rand_id` INT );
  8.  
  9. loop_random: LOOP
  10. IF cnt < 1 THEN
  11. LEAVE loop_random;
  12. END IF;
  13.  
  14. INSERT INTO randomRecords
  15. SELECT r1.id FROM `products` AS r1 JOIN
  16. (SELECT (RAND() *
  17. (SELECT MAX(id) FROM `products`)) AS id) AS r2
  18. WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 1;
  19. SET cnt = cnt - 1;
  20. END LOOP loop_random;
  21.  
  22. SELECT * FROM randomRecords;
  23. END$$
  24. DELIMITER ;


Procedura jak widac posiada dwie zmienne cnt i tablein.
Jak podstawic zmienna "tablein" do zapytania select (pod `products`) ?

Siedze i siedzie i nie moge wymyslec smile.gif probowalem z @ itp i nic nie dziala.
Crozin
W zapytanie SQL o ile dobrze pamiętam nie ma bata, by wstawić dynamicznie nazwę tabeli czy kolumny. Dlatego też będziesz musiał przygotować całe zapytanie dynamicznie (jako prepared statement) i dopiero je wywołać:
  1. SET @sql = CONCAT("INSERT INTO random_records ... FROM ", tbl_name, " AS ... FROM ", tbl_name, " )), AS ...;");
  2. PREPARE stmt FROM @sql;
  3. EXECUTE stmt;
  4. DEALLOCATE PREPARE stmt;
Niezbyt ładne i wygodne w użyciu rozwiązanie ale chyba innego nie ma.
quality
Dziala dzieki smile.gif
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.