Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं mySQL में EXECUTE कथन के बाद किसी कथन का परिणाम कैसे प्राप्त करूं?

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

मेरे सिस्टम पर ठीक काम करता है। पंक्तियों की विषम संख्या आपको राउंड-अप करवाती है

संपादित करें:

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

5 पंक्तियाँ सम्मिलित करें:

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 |
+----+-----------+-------+

Revision1 (PHP दिखाया गया)

यह संशोधन PHP का उल्लेख करने वाले op के कारण है। तो यह उस क्वेरी की किसी विशेष पंक्ति से दिए गए परिणाम सेट का उपयोग करके एक बहु-क्वेरी दिखाता है। @ . का उपयोग दिखाता है चर जो स्पष्ट रूप से इसके मूल्य को बरकरार रखता है। और एक heredoc चर $theSql बहु-क्वेरी के लिए ही सेट किया जा रहा है।

<?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; 
    } 
?>

ब्राउज़र आउटपुट:

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

उपरोक्त का लंबा और छोटा समय यह है कि हम पास की गई क्वेरी के आधार पर 4 बार उस लूप में हैं।

कृपया मैनुअल पेज देखें 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:वैकल्पिक तालिका यदि स्तंभ मौजूद नहीं है

  2. ज़ेंड फ्रेमवर्क जहां क्वेरी में बयान

  3. दूसरे दिन से खर्च किए गए घंटों की गणना करने और अगले दिन समाप्त होने के लिए SQL क्वेरी

  4. पीडीओ तैयार वक्तव्यों की जाँच में त्रुटि

  5. मैसकल डुप्लिकेट विदेशी कुंजी बाधा