如何执行存储在表列MySQL中的查询?

Jan*_*rsh 4 mysql stored-procedures group-concat sql-server-group-concat

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)
Run Code Online (Sandbox Code Playgroud)

我想在REPORT_QUERY列中执行查询.

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

我使用此代码,但如果我的表中只有一个查询,它可以工作.如果有两个查询而不是它给出错误.

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
Run Code Online (Sandbox Code Playgroud)

问题出在哪儿 ?帮我.

Iva*_*ari 5

您可以使用光标获得每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 Code Online (Sandbox Code Playgroud)

创建过程后,您可以调用如下:

调用run_queries();

而已.


小智 0

据我了解,您的问题是您需要运行存储在表单表列中的查询SQL

在这里您可以获取查询表单table column并在 mysqli 中执行它们。

SQL 查询表图像此处存储查询查询表图像

SQL EMPLOYEE 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;
    }
?>
Run Code Online (Sandbox Code Playgroud)

`