1
mysql> select * from CT; 

| CID | MID | REPORT_QUERY   | 
| 1 | 1 | select * from emp;  | 
| 2 | 2 | select * from student; | 

2 rows in set (0.00 sec) 

REPORT_QUERY列でクエリを実行します。テーブルの列に格納されているクエリを実行する方法MySQL?

DELIMITER // 
CREATE PROCEDURE TRYct() 
    BEGIN 
SET @str=(SELECT GROUP_CONCAT(REPORT_QUERY SEPARATOR ' ') FROM CT); 
PREPARE q from @str; 
EXECUTE q; 
    END // 
DELIMITER ; 

私はこのコードを使用しますが、テーブルにクエリが1つしかない場合は機能します。それよりも2つのクエリがあると、エラーが発生します。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from student' at line 1 

ここで問題はありますか?助けて。

答えて

0

私は質問SQLフォームに格納されているクエリを実行する必要があることを理解しています。

ここでは、table columnのクエリフォームを取得し、mysqliで実行することができます。 [動的に実行時に照会テーブルによって呼び出される】ここ

SQL照会テーブル画像がクエリがQUERY TABLE IMAGE

SQLの従業員テーブルに格納される

employees table

PHPのSQLコード: `

<?php 
    $link = new mysqli ('localhost','root','admin','demo'); 

    if($link->connect_error){ 
     die ("Connection Failed".$link->connect_error); 
    } 

    //YOU NEED THIS AS YOU NEED TO ACCESS THE COLUMN DATA IN TABLE 
    $sql = "SELECT * FROM querytable WHERE id=1"; 

    if($res = $link->query($sql)){ 
     //IF THE ROW EXISTS 
     if($res->num_rows > 0){ 
      while($row = $res->fetch_assoc()){ 

       $query = $row['report_query']; //HERE IS THE SQL QUERY STORED IN TABLE , WHICH IS STORED IN ANOTHER VARIABLE 
       $result = $link->query($query); // NOW EXECUTE THE QUERY 
       if($result->num_rows > 0){ 
      ?> 
        <table border="1" cellpadding="10"> 
         <tr> 
          <th>First Name</th> 
          <th>Last Name</th> 
         </tr> 
      <?php 
        while($rows = $result->fetch_assoc()){ 
         //DISPLAY RESULTS HERE 
      ?>   
         <tr> 
          <td><?php echo $rows['first_name'];?></td> 
          <td><?php echo $rows['lastname'];?></td> 
         </tr> 
      <?php 
        } 
      ?> 
        </table> 
     <?php 
       } 
      } 
     } 
    } 
    else 
    { 
     echo $link->error; 
    } 
?> 

1

あなたは、各REPORT_QUERYCT上のテーブルを取得するには、カーソルを使用して、準備されたステートメントを使用していることを実行することができます。

delimiter $$ 
drop procedure if exists run_queries$$ 
create procedure run_queries() 
begin 

    declare s_query varchar(255); 

    declare done bool default false; 
    declare c_queries cursor for  
     select REPORT_QUERY from CT; 
    declare continue handler for not found set done = true; 


    open c_queries; 
    read_loop: loop 

     fetch c_queries into s_query; 
     if done then 
      leave read_loop; 
     end if; 

     -- run the query 
     set @sql = s_query; 
     prepare stmt from @sql; 
     execute stmt; 
     deallocate prepare stmt; 
    end loop; 

end$$ 

は後にプロシージャを作成、あなたに怒鳴る呼び出すことができます。

コールrun_queries();

これだけです。

+0

@ Ivan Cachicatari .....ありがとうございました –

+0

@ JaniHarshあなたの歓迎、受け入れ、私の答えをupvoteを考慮してください:) –

関連する問題