MySQL-クエリを選択

SQL SELECTコマンドは、MySQLデータベースからデータをフェッチするために使用されます。このコマンドは、mysql>プロンプト、およびPHPなどの任意のスクリプトで使用できます。

構文

これは、MySQLテーブルからデータをフェッチするためのSELECTコマンドの一般的なSQL構文です。

SELECT field1, field2,...fieldN 
FROM table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • カンマで区切られた1つ以上のテーブルを使用して、WHERE句を使用してさまざまな条件を含めることができますが、WHERE句はSELECTコマンドのオプション部分です。

  • 1つのSELECTコマンドで1つ以上のフィールドをフェッチできます。

  • フィールドの代わりにスター(*)を指定できます。この場合、SELECTはすべてのフィールドを返します。

  • WHERE句を使用して任意の条件を指定できます。

  • を使用してオフセットを指定できます OFFSETSELECTがレコードの返送を開始する場所から。デフォルトでは、オフセットはゼロから始まります。

  • を使用して返品の数を制限できます LIMIT 属性。

コマンドプロンプトからのデータのフェッチ

これはSQLSELECTコマンドを使用してMySQLテーブルからデータをフェッチします tutorials_tbl

次の例では、からすべてのレコードを返します。 tutorials_tbl テーブル-

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl 
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           1 | Learn PHP      | John Poul       | 2007-05-21      |
|           2 | Learn MySQL    | Abdul S         | 2007-05-21      |
|           3 | JAVA Tutorial  | Sanjay          | 2007-05-21      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.01 sec)

mysql>

PHPスクリプトを使用したデータの取得

同じSQLSELECTコマンドをPHP関数に使用できます mysql_query()。この関数は、SQLコマンドを実行し、後で別のPHP関数を実行するために使用されますmysql_fetch_array()選択したすべてのデータをフェッチするために使用できます。この関数は、行を連想配列、数値配列、またはその両方として返します。行がなくなると、この関数はFALSEを返します。

次のプログラムは、からレコードをフェッチ/表示する方法を示す簡単な例です。 tutorials_tbl テーブル。

次のコードブロックは、tutorials_tblテーブルのすべてのレコードを表示します。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

行の内容が変数$ rowに割り当てられ、その行の値が出力されます。

NOTE −配列値を文字列に直接挿入する場合は、必ず中括弧を付けるようにしてください。

上記の例では、定数 MYSQL_ASSOC PHP関数の2番目の引数として使用されます mysql_fetch_array()、行を連想配列として返すようにします。連想配列を使用すると、インデックスを使用する代わりに名前を使用してフィールドにアクセスできます。

PHPはと呼ばれる別の関数を提供します mysql_fetch_assoc()、これも連想配列として行を返します。

次の例では、mysql_fetch_assoc()関数を使用してtutorial_tblテーブルのすべてのレコードを表示します。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_assoc($retval)) {
      echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

定数を使用することもできます MYSQL_NUMPHP関数mysql_fetch_array()の2番目の引数として。これにより、関数は数値インデックスを持つ配列を返します。

次の例を試して、MYSQL_NUM引数を使用してtutorials_tblテーブルのすべてのレコードを表示します。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
      echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ".
         "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ".
         "--------------------------------<br>";
   }
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

上記の3つの例はすべて、同じ結果を生成します。

メモリの解放

各SELECTステートメントの最後でカーソルメモリを解放することをお勧めします。これは、PHP関数を使用して実行できますmysql_free_result()。次のプログラムは、その使用方法を示す例です。

次の例を試してください-

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
      echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ".
         "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ".
         "--------------------------------<br>";
   }
   mysql_free_result($retval);
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

データをフェッチしている間、好きなだけ複雑なコードを書くことができますが、手順は上記と同じままです。