Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z procedura
quality
post
Post #1





Grupa: Zarejestrowani
Postów: 172
Pomógł: 9
Dołączył: 13.02.2006
Skąd: Warszawa

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


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.


--------------------
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
quality
post
Post #3





Grupa: Zarejestrowani
Postów: 172
Pomógł: 9
Dołączył: 13.02.2006
Skąd: Warszawa

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


Dziala dzieki smile.gif


--------------------
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 Aktualny czas: 20.08.2025 - 04:47