Mysql-select-query
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句を使用して、任意の条件を指定できます。
- SELECTがレコードを返し始める OFFSET を使用してオフセットを指定できます。 デフォルトでは、オフセットはゼロから始まります。
- LIMIT 属性を使用して、返品の数を制限できます。
コマンドプロンプトからのデータの取得
これは、SQL SELECTコマンドを使用して、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スクリプトを使用したデータの取得
同じSQL SELECTコマンドを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に割り当てられ、その行の値が出力されます。
注-配列値を文字列に直接挿入する場合は、必ず中括弧を忘れないでください。
上記の例では、定数 MYSQL_ASSOC がPHP関数* mysql_fetch_array()*の2番目の引数として使用されているため、行は連想配列として返されます。 連想配列を使用すると、インデックスを使用する代わりに名前を使用してフィールドにアクセスできます。
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);
?>
PHP関数mysql_fetch_array()の2番目の引数として、定数 MYSQL_NUM を使用することもできます。 これにより、関数は数値インデックスを持つ配列を返します。
例
次の例を試して、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);
?>
データをフェッチしている間、好きなだけ複雑なコードを書くことができますが、手順は上記と同じままです。