Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để nhận kết quả của một câu lệnh sau câu lệnh EXECUTE trong mySQL?

SET @rows := (SELECT COUNT(*)*0.5 FROM trending);
PREPARE STMT FROM 'SELECT * FROM trending order by somecolumn LIMIT ?';
EXECUTE  STMT USING @rows;

hoạt động tốt trên hệ thống của tôi. số hàng lẻ giúp bạn làm tròn số

Chỉnh sửa:

create table thing2
(   id int auto_increment primary key,
    theWhat varchar(40) not null,
    `count` int not null
);

Chèn 5 hàng:

insert thing2(theWhat,`count`) values ('anchovies',6),('tomato',1),('cat',99),('mouse',8),('spoon',70);

SET @rows := (SELECT COUNT(*)*0.5 FROM thing2);
PREPARE STMT FROM 'SELECT * FROM thing2 LIMIT ?';
EXECUTE  STMT USING @rows;


count might need to be in backticks (not on my system), if that is actually a column and you are doing
 the following :

SET @rows := (SELECT COUNT(*)*0.5 FROM thing2);
PREPARE STMT FROM 'SELECT * FROM thing2 order by `count` LIMIT ?';
EXECUTE  STMT USING @rows;
+----+-----------+-------+
| id | theWhat   | count |
+----+-----------+-------+
|  2 | tomato    |     1 |
|  1 | anchovies |     6 |
|  4 | mouse     |     8 |
+----+-----------+-------+

SET @rows := (SELECT COUNT(*)*0.5 FROM thing2);
PREPARE STMT FROM 'SELECT * FROM thing2 order by theWhat LIMIT ?';
EXECUTE  STMT USING @rows;
+----+-----------+-------+
| id | theWhat   | count |
+----+-----------+-------+
|  1 | anchovies |     6 |
|  3 | cat       |    99 |
|  4 | mouse     |     8 |
+----+-----------+-------+

Bản sửa đổi1 (hiển thị PHP)

Bản sửa đổi này là do op đề cập đến PHP. Vì vậy, điều này hiển thị một truy vấn nhiều, sử dụng tập kết quả được cung cấp từ một dòng cụ thể của truy vấn đó. Cho biết việc sử dụng @ biến rõ ràng vẫn giữ nguyên giá trị của nó. Và một heredoc biến $theSql được đặt cho chính nhiều truy vấn.

<?php
    error_reporting(E_ALL);
    //mysqli_report(MYSQLI_REPORT_ALL);
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    ini_set('display_errors', 1);

    try {
        $mysqli= new mysqli('localhost', 'dbusername', 'thePassword', 'theDbname'); // tweak accordingly
        if ($mysqli->connect_error) {
            die('Connect Error (' . $mysqli->connect_errno . ') '
                . $mysqli->connect_error);
        }
        echo "I am connected and feel happy.<br/>";

        // Note the 3rd statment below (the EXECUTE) and the code below it that cares about output for the 3rd one only

$theSql = <<<SQL
    SET @rows := (SELECT COUNT(*)*0.5 FROM thing2); 
    PREPARE stmt123 FROM 'SELECT * FROM thing2 LIMIT ?'; 
    EXECUTE stmt123 USING @rows; 
    DEALLOCATE PREPARE stmt123;
SQL;
        $shouldDebug=false; // change to true to see more debug info (such as the skipped multi-query results)
        $theCounter=0;
        $weCareAbout=3; // the 3rd line of the command: "EXECUTE stmt123 USING @rows; "
        if ($mysqli->multi_query($theSql)) {
            do { // Note this loop poached from http://php.net/manual/en/mysqli.multi-query.php
                if ($shouldDebug) echo "1a.<br/>";
                $theCounter++;
                // store first result set
                if ($result = $mysqli->store_result()) {
                    if ($shouldDebug)  echo "1b.<br/>";
                    if ($theCounter==$weCareAbout) {
                        while ($row = $result->fetch_row()) {
                            echo $row[0]." ".$row[1]." ".$row[2]."<br>";
                        }
                    }
                    if ($shouldDebug)  echo "1c.<br/>";
                    $result->free();
                    if ($shouldDebug)  echo "1d.<br/>";
                }
                // print divider 
                if ($mysqli->more_results() && $shouldDebug) {
                    printf("-----------------\n"); 
                }
                if ($shouldDebug) "1e.<br/>";
            } while ($mysqli->next_result() && $mysqli->more_results());
            // above line to avoid error: Strict Standards: mysqli::next_result(): There is no next result set. ...
            // ...Please, call mysqli_more_results()/mysqli::more_results() to check whether to call ...
            //
            // the Manual page is not exactly clear on this. In fact, faulty.
            // http://php.net/manual/en/mysqli.multi-query.php
        }

        $mysqli->close();   // just showing it, what the heck
    } catch (mysqli_sql_exception $e) { 
        throw $e; 
    } 
?>

Đầu ra của trình duyệt:

I am connected and feel happy.
1 anchovies 6
2 tomato 1
3 cat 99

Điều dài và ngắn của do / while ở trên là chúng ta đang ở trong vòng lặp đó 4 lần dựa trên truy vấn được truyền.

Vui lòng xem Trang hướng dẫn mysqli.multi-query mysqli.store-result .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL tham gia một-nhiều với Group By chỉ trả về một quan sát

  2. Tìm hai cột trong laravel có giá trị bằng nhau qua Eloquent?

  3. mysql SQL:mục cụ thể được xếp đầu tiên và sau đó sắp xếp phần còn lại của các mục

  4. 'pip install MySQL-python' không thành công với 'IndexError'

  5. Làm cách nào để nối các chuỗi từ một truy vấn con thành một hàng trong mysql?