PHPでデータベースクエリを送信する。 全能のクエリ関数-phpmysqliクエリからのmysqlのクエリへの決定的なガイド
誰もがパレートの法則について聞いたことがあると思います。 どの分野でも、努力の20%が結果の80%をもたらします。 たとえば、ワードローブの20%が80%の時間着用し、クライアントの20%が収入の80%を生み出します。 同様に、Googleスプレッドシートでは、既存の関数の20%を知っていると、考えられるすべての問題の80%を解決できます。
クエリはGoogleスプレッドシートの最も便利な機能の1つだと思います。 しかし、グーグルヘルプではそれは非常に表面的に説明されており、この機能の完全な力は明らかにされていません。 よく調べてみると、既存の機能のほとんどを置き換えることができることが明らかになります。
QUERYを使用するには、SQLの基本的な知識が必要です。 知らない人のために、恐れることはありません。QUERY関数は実際に最も基本的なSQL機能をサポートしています。
QUERY構文
QUERY(データ;クエリ; [ヘッダー])- データ-これは、SQLクエリのデータベースとして機能するセルの範囲です。
- 問い合わせ-SQLクエリのテキスト。
- 見出し配列の最初の行の何行にヘッダーが含まれるかを指定できるオプションの引数です。
詳細情報を最大限に理解するために、次のGoogleスプレッドシートを開いてコピーすることをお勧めします。
コピーしたばかりのdoxにはいくつかのシートがあります。 DBシートは、QUERY関数を使用してアクセスするデータベースです。 レベルシートには、この記事で説明する例が含まれています。 この例は、新しいレベルごとに複雑になります。
クエリ関数のSQLクエリプラン
SQLクエリはすべて、中傷と呼ばれることが多い個別のブロックで構成されます。 クエリ関数のSQLは、次のスリップをサポートするGoogle VisualizationAPIクエリ言語構文を使用します。
- 選択する-リクエストによって返されるフィールドの列挙。
- どこ-リクエストによって処理されたデータ配列がフィルタリングされる条件のリストが含まれています。
- グループ化-結果をグループ化するためのフィールドのリストが含まれています。
- ピボット-ファイナルテーブルの列名として1つの列の値を使用して、クロス集計を作成するのに役立ちます。
- 注文する-結果の並べ替えを担当します。
- 制限-クエリのこの部分を使用して、クエリによって返される行数に制限を設定できます。
- オフセット-この誹謗中傷の助けを借りて、クエリで処理されるべきではない最初の行の数を設定できます。
- ラベル-この誹謗中傷は、クエリによって返されるフィールドの名前を担当します。
- フォーマット-出力データのフォーマットを担当します。
- オプション-データ出力用の追加パラメータを設定することができます。
Hello World for Query(選択)機能
シートLevel_1に移動して、セルA1の数式を見てみましょう。
クエリ(DB!A1:L1143; "select * limit 100")
式の一部 " DB!A1:L1143 "選択を行うデータベースを担当します。 第二部「 選択*制限100"リクエスト自体のテキストが含まれています。 この場合の「*」は、データベースに含まれるすべてのフィールドを返すことを意味します。 「 制限100»出力を最大100行に制限します。 これは最も単純なクエリの例です。 データベースから最初の100行を選択しました。 これは、クエリ関数の一種の「Helloworld」です。
フィルタの使用と並べ替え(場所、順序)
Level_2シートに移動します。 必要なフィールドの一部のみを選択し、フィルタリングと並べ替えの条件を設定しましょう。 たとえば、2015年10月22〜25日の期間のキャンペーンCampaign_1とCampaign_2のデータのみを使用します。 セッションの合計で降順で並べ替えてみましょう。 フィルタリングと並べ替えを行うには、リクエストテキストに誹謗中傷の説明を追加する必要があります どこと 注文..。 上記の例を結果テーブルに出力するには、「キャンペーン」、「日付」、および「セッション」フィールドが必要です。 誹謗中傷に記載される必要があるのは彼らです。 選択する.
データベースのフィールドへの参照は、データベースが配置されているワークシートの列の名前を介して実行されます。
この場合、DBシートにあり、特定のフィールドを参照するデータは、シート列の名前として書き込まれます。 したがって、必須フィールドは次の列にあります。
- 分野 日にち-列A;
- 分野 運動-列B;
- 分野 セッション-列G。
したがって、出力データのリストを担当するクエリの部分は次のようになります。
A、B、Gを選択します
次のリクエストは誹謗中傷です どこ..。 リクエストを作成するときは、この記事の最初のセクションで説明した順序で誹謗中傷を行う必要があります。 発表後 どこフィルタリング条件をリストする必要があります。 この場合、キャンペーン名(キャンペーン)と日付(日付)でデータをフィルタリングしています。 いくつかのフィルタリング条件を使用します。 クエリテキストでは、すべての条件の間に論理ORまたはAND演算子が必要です。 日付によるフィルタリングは、数値やテキスト値によるフィルタリングとは少し異なります。適用するには、日付演算子を使用する必要があります。 クエリのデータフィルタリング部分は次のようになります。
WHERE(A> =日付 "2015-10-22" AND A<= date"2015-10-25") AND (B = "Campaign_1" OR B = "Campaign_2")
角かっこを使用したデータフィルタリングを2つの論理的な部分に分割しました。1つ目は日付でフィルタリングし、2つ目はキャンペーン名でフィルタリングします。 この段階では、選択するデータとデータをフィルタリングするための条件を説明する式は次のようになります。
クエリ(DB!A1:L1143; "Select A、B、G WHERE(A> = date" 2015-10-22 "AND A<= date"2015-10-25") AND (B = "Campaign_1" OR B = "Campaign_2")")
たとえば、この投稿で例として使用されているドキュメントの新しいシートにコピーして貼り付けると、次の結果が得られます。
通常の論理演算子(=、<, >)WHERE句は、追加のフィルタリング演算子をサポートします。
- 含まれています-文字列内の特定の文字の内容をチェックします。 たとえば、WHERE Aに「John」が含まれている場合、列AからJohnを含むすべての値(たとえば、John Adams、Long John Silver)がフィルタに返されます。
- で始まる-プレフィックスで値をフィルタリングします。つまり、行の先頭の文字をチェックします。 たとえば、「en」で始まると、エンジニアリングと英語が返されます。
- で終わる-行末の値をフィルタリングします。 たとえば、行 'カウボーイ ’は「「男の子」で終わる」または「「y」で終わる」で返されます。
- 一致する-正規表現に一致します。 例:一致する場所 ‘。* Ia ’はインドとナイジェリアの値を返します。
- お気に入り -正規表現の簡略化されたバージョンで、ワイルドカードを使用して文字列が特定の式と一致するかどうかを確認します。 現時点では、likeは2つのワイルドカードをサポートしています。「%」は文字列内の任意の数の文字を意味し、「_」は任意の1文字を意味します。 たとえば、「where name like‘fre% ’」は行と一致します 「Fre ’, 'フレッド ’、および’フレディ ’.
リクエストはすでに特定の期間のデータをフィルタリングしており、必要なキャンペーンのみを残しています。 セッション数に応じて結果を降順で並べ替えるだけです。 これらのクエリでの並べ替えは、従来、SQLに対して中傷を使用して実行されていました。 注文する..。 構文は非常に単純です。結果を並べ替えるフィールドをリストするだけで、並べ替え順序も指定する必要があります。 デフォルトは昇順、つまり昇順です。 フィールド名の後にdescパラメータを指定すると、クエリはスラッシュで指定された降順で結果を返します。 注文する田畑。
この場合、リクエストテキストの行がフィルタリングを担当します。
Gdescによる注文
したがって、必要な問題を解決するLevel_2シートの式の最終結果は、次のようになります。
クエリ(DB!A1:L1143; "SELECT A、B、G WHERE(A> = date" 2015-10-22 "AND A<= date"2015-10-25") AND (B = "Campaign_1" OR B = "Campaign_2") ORDER BY G DESC")
これで、最も単純なSQL構文とQUERY関数を使用してデータをフィルタリングおよびソートできます。
".
おそらくモスクワ事務所の人たちは時間がないので、Query Language Reference(バージョン0.7)の無料翻訳があります。
Google VisualizationAPI。 クエリ言語(バージョン0.7)
Google Visualization APIクエリ言語を使用すると、データソースにクエリを実行してデータを操作できます。
クエリ言語を使用すると、結果を達成するために必要な方法でデータを構造化できます。
クエリ言語の構文はSQLに似ています。 SQLの使用に習熟している人は、クエリ言語をすばやく習得できます。 構文セクションでは、これらの言語の違いを識別します。
レンダリングにクエリ言語を使用する必要は必ずしもないことに注意してください。 使用するにはベースが必要です。 内容に。
クエリ言語の使用
クエリ文字列は、JavaScriptコードから、またはパラメータとしてデータソースリンクに追加するという2つの方法でデータソースに追加できます。 リンクにクエリパラメータが含まれていない場合、デフォルトではデータセット全体が返されます。 このセットは、クエリをデータソース自体に合わせて調整することで変更できます。 Googleスプレッドシートでクエリ機能を使用している場合は、次の手順をスキップして次の部分に進むことができます。JavaScriptからのリクエストの設定
JavaScriptコードからクエリ文字列を設定するには、メソッドを呼び出す必要があります setQuery google.visualization.Queryクラス。var query = new google.visualization.Query(DATA_SOURCE_URL);データソースへのクエリ文字列は、パラメータを使用して追加できます tq..。 したがって、データセットを調整するだけで、他の開発者によって作成された視覚化を使用することができます。
query.setQuery( "select dept、sum(salary)group by dept");
query.send(handleQueryResponse);
クエリ文字列は正しくURLエンコードされている必要があります。 JavaScript関数を使用できます encodeURIComponentエンコードするか、セクションの最後にあるツールを使用して手動で行います。
例
Googleスプレッドシートのクエリ例を考えてみましょう(列識別子は常に文字です。公開時には列名は識別子ではありません。クエリでは列識別子を使用する必要があります)コーディング後、リクエストは次のようになります。
選択%20A%2C%20sum(B)%20group%20by%20Aデータテーブルのアドレスが次のとおりであるとします。
http://spreadsheets.google.com/a/google.com/tq?key=ABCDEリクエストパラメータを追加します &tq = YOUR_QUERY_STRINGテーブルへのリンクに移動し、準備ができたクエリ文字列を取得します
http://spreadsheets.google.com/a/google.com/tq?key=ABCDE&tq=select%A%2C%20sum(B)%20group%20by%20A
言語構文
概要
私のクエリ言語はSQLに非常に似ています。 ただし、考慮に入れる必要のある詳細がいくつかあります。データ表
このドキュメントには、クエリの結果を指す「データテーブル」という用語が含まれています。 テーブルは行と列で構成されます。 各列には次のプロパティがあります。
- ID(または列ID)..。 テーブルの列を参照するために使用されます。 識別子で列を参照するだけでよいことに注意してください。 騙す:識別子にスペースを使用しないようにしてください。これにより、リクエストの編集が困難になる可能性があります。 さらに、スペースを含むすべての識別子はバッククォートで囲む必要があります。
- ラベル..。 これは、通常エンドユーザーに表示される文字列です。 たとえば、円グラフの凡例や表グラフのタイトルなどです。 GoogleスプレッドシートのQUERY()関数には適用されません.
- データ型..。 次のデータ型がサポートされています:文字列、数値、ブール値、日付(日付)、日付と時刻(datetime)、時刻(timeofday)。 列のすべての値は、その列のデータ型またはnullになります。 これらのデータ型はJavaScript型と非常に似ていますが、同一ではありません。 これらについては、リテラルのセクションで説明しています。
- テンプレートのフォーマット..。 データテーブルは、すべてまたは一部の列のフォーマットパターンをサポートできます。 これらについては、「フォーマット」セクションで説明しています。
このドキュメントでは、例では次のデータと列タイプのテーブルを使用しています。
名前 ストリング |
部門 ストリング |
ランチタイム 時刻 |
給料 |
HireDate 日にち |
年 番号 |
isSenior ブール値 |
SeniorityStartTime 日付時刻 |
---|---|---|---|---|---|---|---|
ジョン | エンジニアリング | 12:00:00 | 2005-03-19 | 35 | NS | 2007-12-02 15:56:00 | |
デイブ | エンジニアリング | 12:00:00 | 2006-04-19 | 27 | NS | ヌル | |
サリー | エンジニアリング | 13:00:00 | 2005-10-10 | 30 | NS | ヌル | |
ベン | 販売 | 12:00:00 | 2002-10-10 | 32 | NS | 2005-03-09 12:30:00 | |
ダナ | 販売 | 12:00:00 | 2004-09-08 | 25 | NS | ヌル | |
マイク | マーケティング | 13:00:00 | 2005-01-10 | 24 | NS | 2007-12-30 14:40:00 |
言語演算子
クエリ言語は、1つまたは2つの単語で構成される次の演算子で構成されます。 オペレーターは、表に示されている順序で相互にフォローする必要があります。オペレーター | 使用法 |
---|---|
選択する | 返される列と順序を選択します。 演算子を省略すると、テーブルのすべての列が返されます。 |
条件に一致するテーブル行のみを返します。 演算子を省略すると、テーブル内のすべての行が返されます。 | |
グループ化 | 行ごとに値をグループ化します。 |
ピボット | ピボットテーブルと同様に、列内の一意の値を新しい列に変換します。 |
注文する | 値に基づいて文字列を並べ替えます。 |
制限 | 返される行の制限を設定します。 |
オフセット | 指定された行数を出力からスキップします。 |
ラベル | 列ラベルを設定します。 |
フォーマット | 書式設定パターンに従って、指定された列の値を書式設定します。 |
オプション | 追加のパラメータを設定します。 |
から | from演算子は使用されません。 |
選択する
selectステートメントは、返される列とその順序を指定します。 演算子が指定されていない場合、またはselect *が指定されている場合、すべてのテーブル列が元の順序で返されます。 列は識別子を介して参照できますが、ラベルを介して参照することはできません。 Googleスプレッドシートの識別子は、1文字または2文字の列名(A、B、C、...、AC、...、DC、...)です。演算子パラメーターは、列ID、集計関数、スカラー関数、または算術演算子です。
例:
選択する *電子メールアドレス日にち):
部門、給与を選択します
最大(給与)を選択
結果が得られます:
ランチタイム | 名前 |
---|---|
12:00:00 | ジョン |
12:00:00 | デイブ |
13:00:00 | サリー |
12:00:00 | ベン |
12:00:00 | ダナ |
13:00:00 | マイク |
単純な比較演算子を使用して条件を記述します<=, <, >, >=, =, !=, <>..。 両方の演算子!=、<>平均 等しくない..。 文字列は、辞書式の意味に従って比較されます。 多くの言語のように==ではなく、=演算子を使用して同等性がチェックされることに注意してください。..。 nullとの比較は、nullであり、nullではありません。 GoogleスプレッドシートでQUERY()を使用する場合、文字列フィールドはnullではなく空の ""であるのが一般的です。
ブール演算子and、or、notを使用して、複数の条件を組み合わせることができます。 括弧は、明示的な優先順位を定義するために使用されます。
where句は、より複雑な文字列比較のために追加の演算子も使用します。 これらの演算子は2つの引数を取りますが、これは文字列である必要があります。文字列以外の引数(日付、数値)は、比較前に文字列に変換されます。 比較では大文字と小文字が区別されます(この機能をスムーズにするには、スカラー関数upper()、lower()を使用します)。
含む-部分文字列に一致します。 文字列の一部が指定された引数(部分文字列)と完全に一致する場合、式はtrueを返します。 たとえば、名前に「John」が含まれている場合は、 「ジョン」、「ジョン・アダムズ」、「ロング・ジョン・シルバー」だがしかし 「ジョン・アダムズ」.
例:
選択する *次の例は、スペースを使用して識別子を参照する方法を示しています( 電子メールアドレス)および予約語の名前と一致する識別子( 日にち):
部門、給与を選択します
最大(給与)を選択
「メールアドレス」、「名前」、「日付」を選択します次のクエリを例のテーブルに適用してみましょう。
結果が得られます:
ランチタイム | 名前 |
---|---|
12:00:00 | ジョン |
12:00:00 | デイブ |
13:00:00 | サリー |
12:00:00 | ベン |
12:00:00 | ダナ |
13:00:00 | マイク |
mysql_query()渡されたポインタによって参照されるサーバーのアクティブなデータベースに要求を送信します。 link_identifierを省略すると、最後に開いた接続が使用されます。 開いている接続がない場合、関数は関数と同様にDBMSへの接続を試みます mysql_connect()パラメータなし。 クエリ結果はバッファリングされます。
コメント:クエリ文字列はセミコロンで終わらせてはなりません。
SELECT、SHOW、EXPLAIN、DESCRIBEクエリの場合のみ、 mysql_query()クエリ結果へのポインタを返す、または NSリクエストが完了しなかった場合。
その他の場合(INSERT、UPDATE、DELETE、DROPなど)、 mysql_query()戻り値 NSリクエストが成功した場合 NSエラーの場合。 値が等しくない NSリクエストが正常に完了したことを示します。 彼は、影響を受けた、または返された行の数については話しません。 リクエストが成功しても行に影響がない可能性は十分にあります。
次のクエリは正しくなく、 mysql_query()戻ります NS :
mysql_query()また、エラーと見なされ、返されます NSクエリで指定されたテーブルを操作するための十分な権限がない場合。
クエリ結果を操作するときは、この関数を使用できます mysql_num_rows() SELECTクエリ、行、またはによって返される番号を見つけるには mysql_affected_rows() DELETE、INSERT、REPLACE、またはUPDATEクエリによって処理された行数を検索します。
SELECT、SHOW、DESCRIBE、EXPLAINクエリの場合のみ、関数 mysql_query()関数で使用できる結果へのポインタを返します mysql_fetch_array()およびクエリ結果を処理するその他の関数。 結果の処理が終了したら、関数を使用して結果を保存するために使用されたリソースを解放できます。
ノート:上部構造 パワークエリコマンドのグループとしてExcel2016で提供されます ダウンロードして変換する..。 この記事の情報は、PowerQueryと新しいグループの両方に適用されます。 詳細については、「Excel2016でのダウンロードと変換」を参照してください。
Power Queryでは、操作 追加最初のクエリのすべての行を含み、次に2番目のクエリのすべての行を含む新しいクエリを作成します。
安全上の注意: プライバシーレベルプライベートまたは組織的な複数のソースからのデータの偶発的な集約を防ぎます。 一部のクエリでは、ユーザーが誤ってプライベートデータソースから別のソースにデータを送信する場合があります。 攻撃者はこの機会を利用できます。 Power Queryは、各データソースを分析し、そのプライバシーレベル(パブリック、組織、プライベート)を決定します。 プライバシーレベルの詳細については、プライバシーレベルを参照してください。
進行中の追加
次の2種類の追加操作を実行できます。 中間加算また インライン追加..。 使用する 中間加算追加操作ごとに新しいクエリが作成されます。 で インライン追加最終結果に到達するまで、既存のクエリにデータを追加します。 結果は、現在のクエリの最後に新しいステップです。
インライン追加
中間加算
参照:
ノート: クエリエディタで新しいリクエストを読み込んだり、編集したり、作成したりするときにのみ表示されます パワークエリ..。 ビデオはウィンドウを示しています クエリエディタこれは、Excelブックでクエリを変更した後に表示されます。 表示するには クエリエディタブック内の既存のクエリをダウンロードまたは変更せずに、セクション 外部データの取得リボンタブ パワークエリ選ぶ 他のソースから>空のクエリ..。 ビデオは表示方法の1つを示しています クエリエディタ.
MySQLサーバーへの接続方法、使用するデータベースの選択方法、MySQLサーバーにクエリを送信するPHP関数、2つの簡単なクエリ(テーブルの作成と削除)、接続を閉じる方法を学びました。
ここで、MySQLクエリについて詳しく説明します。 それでは始めましょう!
テーブルの作成-CREATETABLE
これで空のデータベースができました。テーブルはありません。 それでは、最初にテーブルを作成しましょう。 これを行う方法は、最初の部分からすでに知っています。
必要なプレートを作成するスクリプトコードは次のとおりです。
$ link = mysqli_connect( "localhost"、 "root"、 ""、 "tester"); if(!$ link)die( "エラー"); $ query = "CREATE TABLE users(login VARCHAR(20)、password VARCHAR(20))"; if(mysqli_query($ link、$ query))echo "テーブルが作成されました。"; else echo "テーブルが作成されていません:"。mysqli_error(); mysqli_close($リンク);
テーブルには、ログインとパスワードの2つのフィールドしかありません。 今のところ、これ以上は必要ありません。プロセスを複雑にしないでください。
これで、テーブルが作成されました。
テーブルへの行(レコード)の追加-INSERT
insert SQLコマンドを使用して、テーブルに新しい行を追加できます。 次に例を示します。
$ link = mysqli_connect( "localhost"、 "root"、 ""、 "tester"); if(!$ link)die( "エラー"); $ query = "INSERT INTO users(login、password)VALUE(" zeus "、" pass123 ")"; if(mysqli_query($ link、$ query))echo "ユーザーが追加されました。"; それ以外の場合は、「ユーザーが追加されていません:」とエコーします。 mysqli_error(); mysqli_close($リンク);
SQLクエリは、INSERT INTOコマンド、データベース名users、括弧内のフィールド名、単語VALUE、括弧内の追加値で構成されます。 値は引用されています。
リクエストの構文は次のようになります。
INSERT INTO table_name(column1、column2)VALUE( "x1"、 "x2")
2番目の括弧内の引用符は必須です。
値の代わりに変数を使用できます。 次に例を示します。
$ link = mysqli_connect( "localhost"、 "root"、 ""、 "tester"); if(!$ link)die( "エラー"); $ login = "zeus"; $ password = "pass123"; $ query = "INSERT INTO users(login、password)VALUE(" $ login "、" $ password ")"; if(mysqli_query($ link、$ query))echo "ユーザーが追加されました。"; それ以外の場合は、「ユーザーが追加されていません:」とエコーします。 mysqli_error(); mysqli_close($リンク);
もちろん、この例はほとんど意味がありません。 これが、登録時にユーザーが提供するログインとパスワードがデータベースに記録される方法であると聞いて、初心者にとって役立つ場合があります。 このデータは変数に格納され、チェック後、データベースに書き込まれます。
1つのINSERTクエリで複数の行を挿入する簡単な方法があります。
INSERT INTO users(login、password)VALUE( "bob"、 "eee333")、( "Rooki"、 "12345")、( "magy"、 "olol88e8")
ご覧のとおり、列挙されたデータは単純にコンマで区切られています。
そこで、INSERTコマンドを使用して、テーブルにレコードを追加する方法を学びました。 進む。
テーブルビュー:SELECTコマンド
これで、行を持つusersテーブルができました。 前のスクリプトは複数回実行でき、そのたびにテーブルに行が追加されます。 これで、テーブルにいくつの行があるかわからない場合があります。 そして、私たちがそれに何を書いたか知りたいです。
テーブルからデータを取得するには、SQLSELECTコマンドを使用します。 *記号は、すべてのデータを要求していることを意味し、FROMという単語の後に、データを受信するテーブルの名前を書き込みます。
usersテーブルのすべてのデータをクエリしてみましょう。
$ link = mysqli_connect( "localhost"、 "root"、 ""、 "tester"); if(!$ link)die( "エラー"); $ query = "SELECT * FROM users"; $ result = mysqli_query($ link、$ query); if(!$ result)echo "エラーが発生しました:"。 mysqli_error(); それ以外の場合は、「受信したデータ」をエコーします。 mysqli_close($リンク);
mysqli_query()関数は、クエリ結果識別子を返しました。これを変数に入れ、将来的には他のPHP関数を使用して操作します。
リクエストのレコード数
クエリに含まれる行数を把握しましょう。 テーブルにレコードを追加するためのスクリプトを実行しましたが、何回か覚えていません。また、テーブルに行がいくつあるかわかりません。
mysqli_num_rows()関数は、クエリ結果の行数を決定するために使用されます。 この関数にはクエリ結果の識別子が渡され、レコード数が返されます。
$ link = mysqli_connect( "localhost"、 "root"、 ""、 "tester"); if(!$ link)die( "エラー"); $ query = "SELECT * FROM users"; $ result = mysqli_query($ link、$ query); if(!$ result)echo "エラーが発生しました:"。 mysqli_error(); それ以外の場合は、「受信したデータ」をエコーします。 $ count = mysqli_num_rows($ result); echo "テーブルの合計行数:$ count。"; mysqli_close($リンク);
テーブル内のレコード数を調べる必要がある場合、指定された方法は最適な方法ではありません。 ここで、クエリで見つかったレコードの数がわかりましたが、テーブル内のレコードの数は別の方法で検索されます。
テーブルのレコード数SELECTCOUNT(*)
テーブル内のレコード数を確認するには、SELECT COUNT(*)FROMtable_nameコマンドを使用できます。
$ link = mysqli_connect( "localhost"、 "root"、 ""); if(!$ link)die( "エラー"); mysqli_select_db( "テスター"); $ query = "SELECT * FROM users"; $ result = mysqli_query($ link、$ query); if(!$ result)echo "エラーが発生しました:"。 mysqli_error(); それ以外の場合は、「受信したデータ」をエコーします。 $ count = mysqli_fetch_row($ result); echo "テーブルの合計行数:$ count。"; mysqli_close($リンク);
ここでは、新しいPHP関数mysqli_fetch_row()を使用してデータをフェッチしていることに注意してください。 この関数は、クエリ結果の行を単純な配列の形式で返します。この場合、行に1つのフィールドがあり、インデックスは0です。
クエリの結果をループで表示する
SELECTコマンドを使用してSQLクエリを実行し、クエリ結果の識別子を取得した後、PHPは結果レコードセットに内部ポインタを作成します。 このポインタは、現在のレコードを参照した後、自動的に次のレコードに移動します。 このメカニズムにより、SELECTクエリの結果セットを非常に簡単にループできます。
PHPには、結果のクエリの各行のフィールドで構成される配列を取得できるいくつかの関数があります。 例としてmysqli_fetch_row()関数を取り上げましょう。 この関数にはリクエストIDが渡され、配列が返されます。 したがって、ループではクエリ結果全体がスキャンされます。クエリ結果の最後に到達すると、関数はfalseを返します。
したがって、usersテーブル(SELECT * FROM users)からすべてのデータをクエリします。
"; while($ row = mysqli_fetch_row($ result))(echo"ログイン:$行。パスワード:$行。
";)mysqli_close($ link);
Mysqli_fetch_row()は単純な配列を返します。 ループの各反復で、テーブルから行を含む配列を受け取ります。この配列には、数値インデックスを指定することでアクセスできます。
mysql_fetch_assoc()関数を使用して同じことを行うことができ、連想配列を返します。
$ link = mysqli_connect( "localhost"、 "root"、 ""); if(!$ link)die( "エラー"); mysqli_select_db( "テスター"); $ result = mysqli_query($ link、 "SELECT * FROM users"); if(!$ result)echo "エラーが発生しました:"。 mysqli_error(); else echo "データを受信しました。
"; while($ row = mysqli_fetch_assoc($ result))(echo"ログイン:$行。パスワード:$行。
";)mysqli_close($ link);
関数mysqli_fetch_array()-任意のタイプの配列を返し、mysqli_fetch_object()-オブジェクトを返します。
SELECTDISTINCTクエリ-一意のフィールド値
新しいテーブルを作成しましょう:
$ link = mysqli_connect( "localhost"、 "root"、 ""); if(!$ link)die( "エラー"); mysqli_select_db( "テスター"); //既存のテーブルを削除しますmysqli_query($ link、 "DROP TABLE users"); //新しいテーブルを作成します$ query = "CREATE TABLE users(name VARCHAR(20)、surname VARCHAR(20)、age TINYINT UNSIGNED)"; if(mysqli_query($ link、$ query))echo "テーブルが作成されました。
"; else echo"テーブルが作成されていません: "。mysqli_error(); //テーブルにレコードを追加するための関数functionadd_new_line($ link、$ query)(if(!mysqli_query($ link、$ query))echo" User not追加: "。mysqli_error();)//レコードを追加add_new_line($ link、" INSERT INTO users(name、surname、age)VALUE( "Max"、 "Jayson"、 "33") "); add_new_line($ link 、 "INSERT INTO users(name、surname、age)VALUE(" Bob "、" Freeman "、" 26 ")"); add_new_line($ link、 "INSERT INTO users(name、surname、age)VALUE(" Sara " 、 "Lopes"、 "65") "); add_new_line($ link、" INSERT INTO users(name、surname、age)VALUE( "Serg"、 "Pupin"、 "29") "); add_new_line($ link、 "INSERT INTO users(name、surname、age)VALUE(" Serg "、" Borman "、" 43 ")"); add_new_line($ link、 "INSERT INTO users(name、surname、age)VALUE(" Max "、 "Lopes"、 "21") "); //テーブルの内容をブラウザに表示$ result = mysqli_query($ link、" SELECT * FROM users "); if(!$ Result)echo"エラーが発生しました: "。Mysqli_error(); elseecho"データを受信しました。
"; while($ row = mysqli_fetch_assoc($ result))(echo"名:$行。姓:$行。年齢:$行。
";)mysqli_close($ link);
したがって、一意のレコードを持つ新しい、より複雑なテーブルがあります。 次に、データベースにある名前の数を見てみましょう。
$ link = mysqli_connect( "localhost"、 "root"、 ""); if(!$ link)die( "エラー"); mysqli_select_db( "テスター"); $ result = mysqli_query($ link、 "SELECT DISTINCT name FROM users"); エコー「名前の総数:」。 mysqli_num_rows($結果)。 "
"; echo"名前のリスト:
"; while($ name = mysqli_fetch_row($ result))(echo" $ name
";)mysqli_close($ link);
SQLクエリ「SELECTDISTINCTname FROM users」は、テーブル内のすべての一意の名前を含む結果を返しました。 クエリ結果の新しい行の各一意の名前。
結果の並べ替え-ORDERBY
SQLクエリにORDERBYコマンドを追加することにより、クエリ結果を昇順(数字と文字のアルファベット順)で並べ替えます。 これは、通常のクエリを比較し、年齢(年齢フィールド)で並べ替えることができる例です。
";)echo"年齢で並べ替え:
"; $ result = mysqli_query($ link、" SELECT * FROM users ORDER BY age "); while($ line = mysqli_fetch_row($ result))(echo"名:$行。姓:$行。年齢:$ライン。
";)mysqli_close($ link);
ORDER BYコマンドのageフィールドをnameフィールドに置き換えて、結果を確認できます。
クエリ結果を逆の順序で並べ替えるには、ORDER BY ageDESCコマンドを使用します。
マッチング条件-WHERE
WHEREコマンドをSQLクエリに追加することにより、条件に一致するレコードのみをクエリします。 たとえば、30歳未満の人にリクエストをしてみましょう。
これを行うには、SQLクエリ「SELECT * FROM users WHEREage」を使用します
$ link = mysqli_connect( "localhost"、 "root"、 ""); if(!$ link)die( "エラー"); mysqli_select_db( "テスター"); エコー「30歳未満の人:
"; $ result = mysqli_query($ link、" SELECT * FROM users WHERE age<30");
while ($line = mysqli_fetch_row($result))
{
echo "Имя: $line. Фамилия: $line. Возраст: $line.
";)mysqli_close($ link);
結果を年齢の昇順ですぐに並べ替えることもできます。
"SELECT * FROMユーザーWHERE年齢<30 ORDER BY age ".
「SELECTnameFROM usersWHEREage」というクエリを実行すると<30 ORDER BY age ", то в результате нам вернут только значения поля "name", но они также будут отсортированы по age.
2つのフィールドの値をクエリできます: "SELECT name、age FROM users WHERE age
次に、「Max」という名前のすべてのユーザーを求めます。
$ link = mysqli_connect( "localhost"、 "root"、 ""); if(!$ link)die( "エラー"); mysqli_select_db( "テスター"); echo "All Max:
"; $ result = mysqli_query($ link、" SELECT * FROM users WHERE name = "Max" "); while($ line = mysqli_fetch_row($ result))(echo"名:$行。姓:$行。年齢:$行。
";)mysqli_close($ link);
また、クエリの別の例では、Maxを除くすべての名前をusersテーブルからのみ選択します。
SELECT name FROM users WHERE name!= "Max"
WHERE句はこれですべてです。
レコードの制限-LIMIT
SQLクエリにLIMITコマンドを追加することで、結果のサイズを制限します。
最初の3つのレコード「SELECT * FROM usersLIMIT3」を出力するクエリ。 それがどのように機能するか見てみましょう:
$ link = mysqli_connect( "localhost"、 "root"、 ""); if(!$ link)die( "エラー"); mysqli_select_db( "テスター"); echo "テーブルの内容:
"; $ result = mysqli_query($ link、" SELECT * FROM users "); while($ line = mysqli_fetch_row($ result))(echo"名:$行。姓:$行。年齢:$行。
";) エコー"
最初の3つのエントリ:
"; $ result = mysqli_query($ link、" SELECT * FROM users LIMIT 3 "); while($ line = mysqli_fetch_row($ result))(echo"名:$行。姓:$行。年齢:$行。
";) エコー"
2番目の3つのエントリ:
"; $ result = mysqli_query($ link、" SELECT * FROM users LIMIT 3、3 "); while($ line = mysqli_fetch_row($ result))(echo"名:$行。姓:$行。年齢: $行..。
";)mysqli_close($ link);
また、ここではクエリ「SELECT * FROM users LIMIT3,3」を使用しました。 2番目のトリプルは、クエリ結果のオフセットを示します。
パターンマッチング-LIKE
SQL言語は単純なパターンをサポートしています。 このために、LIKEコマンドが使用され、パターンは%文字を使用して指定されます。
これは、文字Sで始まる名前のすべてのレコードを返すクエリの例です。
SELECT * FROM users WHERE name LIKE "S%"
リクエストのテスト:
$ link = mysqli_connect( "localhost"、 "root"、 ""); if(!$ link)die( "エラー"); mysqli_select_db( "テスター"); echo "テーブルの内容:
"; $ result = mysqli_query($ link、" SELECT * FROM users "); while($ line = mysqli_fetch_row($ result))(echo"名:$行。姓:$行。年齢:$行。
";) エコー"
Sで始まる名前:
"; $ result = mysqli_query($ link、" SELECT * FROM users WHERE name LIKE "S%" "); while($ line = mysqli_fetch_row($ result))(echo"名:$行。姓:$行。年齢:$行。
";)mysqli_close($ link);
これは、文字sで終わる名前のすべてのレコードを返すクエリの例です。
SELECT * FROM users WHERE name LIKE "%s"
条件のマッチング-IN
INコマンドを使用したこのクエリは、条件に厳密に一致する行のみを返します。
たとえば、21、26、33歳の人々に関心があります。
SELECT * FROM users WHERE age IN(21,26,33)
リクエストのテスト:
$ link = mysqli_connect( "localhost"、 "root"、 ""); if(!$ link)die( "エラー"); mysqli_select_db( "テスター"); echo "テーブルの内容:
"; $ result = mysqli_query($ link、" SELECT * FROM users "); while($ line = mysqli_fetch_row($ result))(echo"名:$行。姓:$行。年齢:$行。
";) エコー"
必要な年齢(21、26、33)の人:
"; $ result = mysqli_query($ link、" SELECT * FROM users WHERE age IN(21、26、33) "); while($ line = mysqli_fetch_row($ result))(echo"名:$行。姓。 :$行。年齢:$行。
";)mysqli_close($ link);
列の最大値と最小値
usersテーブルで年齢の最大値を選択します。
SELECT max(age)FROM users
次のクエリは、nameフィールドとageフィールドを使用してusersテーブルからデータを選択します。ここで、ageは最小値です。
SELECT名、最小(年齢)FROMユーザー
レコードの更新-UPDATE
MaxLopesを15歳に設定しましょう。 これは、MySQLクエリを使用して実行されます。
UPDATEユーザーSETage = "15" WHERE name = "Max" AND surname = "Lopes"
クエリの新しいANDコマンド(英語では-は「and」を意味します)に注意してください。 名前を指定しない場合、テーブル内のすべてのMaxに15歳の年齢が設定されます。
1つのクエリで、1行の2つ以上のフィールドを更新できます。 これは次のように行われます。
UPDATEユーザーSETage = "18"、surname = "Coocker" WHERE id = "3"
テーブルにはidフィールドがないため、このクエリは機能しません。 しかし、私たちは間違いなく、一意の行番号を含むこのフィールドを学習します。
レコードの削除-DELETE
MySQLデータベースにクエリを実行して、レコードを削除します。
ユーザーからの削除WHEREid = "10"
繰り返しますが、テーブルにはidフィールドはありません。 しかし、18歳未満のすべての人をそこから取り除くことができます。
年齢を問わずユーザーから削除< "18"
ドロップテーブル
ユーザーテーブル全体を削除するMySQLデータベースクエリ:
DROPTABLEユーザー
列の削除-ALTERTABLE ... DROP..。
テーブルから列を削除する必要がある場合があります。たとえば、ユーザーから年齢列を削除しましょう。
ALTERTABLEユーザーのドロップ年齢
このMySQLクエリは、列を永続的かつ取り消し不能に削除しました。
列の追加-ALTERTABLE ... ADD..。
既存のテーブルに列を追加したい場合があります。たとえば、age列をusersテーブルに再度追加しましょう。
ALTERTABLEユーザーは年齢を追加しますTINYINTUNSIGNED
列の名前変更-ALTERTABLE ... CHANGE..。
たとえば、年齢列の名前をvozrastに変更するなど、列の名前を変更する必要がある場合があります。 私たちはこのようにします:
ALTERTABLEユーザーCHANGEage vozrast TINYINT UNSIGNED
このMySQLクエリは、年齢列の名前をTINYINTUNSIGNEDデータ型のvozrastに変更しました。
テーブルの名前の変更-RENAMETABLE ... TO..。
テーブルの名前を変更する必要がある場合があります。
TABLEユーザーの名前を人々に変更
データベースの削除-DROPDATABASE
このクエリは、テスターという名前のデータベースを削除できます。
DROPDATABASEテスター
データベースの作成-CREATEDATABASE
このクエリは、testerという名前のデータベースを作成します。
CREATEDATABASEテスター
このリクエストはデンバーでは機能しますが、データベースユーザーに削除を実行する権限がない場合、ホスティングでは機能しない可能性があります。
結果
そのため、このパートでは、MySQLへのクエリについて理解しました。 私たちが検討したリクエストの多くは、作業の過程で役に立たないことがよくありますが、スクリプトの開発の過程で間違いなく役立つので、それらを知っておく必要があります。
一部のリクエストは通常、phpMyAdminからのみ行われます(データベースの作成と削除など)。
サイトの作業では、通常、テーブルにレコードを追加するか、レコードを編集するか、テーブルからレコードを削除する必要があります。
次のステップは、MySQLデータ型を調べることです。