ホームページ > バックエンド開発 > PHPチュートリアル > mysql php クエリ文の書き方

mysql php クエリ文の書き方

WBOY
リリース: 2016-06-23 14:15:16
オリジナル
1114 人が閲覧しました

mysql php

データベーステーブル構造

製品テーブル製品

製品ID製品カタログ製品名
productid cids productname :
1. たとえば、製品ページに入り、URL を通じて製品 ID を取得する場合、製品 ID を通じて CID を取得する方法
次に、CIDS と同じコンテンツを持つ製品テーブルを見つけるためのステートメントを記述する必要があります。すべての製品

たとえば、URL を通じて productid 値が 1 である場合、cids 値は (1, 3, 4) になります。製品テーブル内で 1、3、または 4 を含むすべての製品を検索します。ディスカッションに返信します (解決策)

1、3、4 を配列に分割し、クエリを走査します。

リクエストにはいくつかの問題があります。まず、データベーステーブルの設計が完全に間違っています。クエリ結果を分割する必要があり、分割後も同様のクエリがまだある場合は、テーブルを再設計する必要があります。たとえば、各行に記録できる cid は 1 つだけです。

現在の操作を実行する必要がある場合は、2 つのステップで実行することをお勧めします。そうしないと、最初のステップは
select cids from product where productid = xxxx
ログイン後にコピー


です。たとえば、得られる結果は (1, 3, 4) です。 ) PHPでは配列に分割してデータベースでクエリします

select productid from product where ','+cids+',' like '%,1,%'unionselect productid from product where ','+cids+',' like '%,3,%'unionselect productid from product where ','+cids+',' like '%,4,%'
ログイン後にコピー

直接likeではありませんが、前後にカンマを付けているのは、12,13,14であればlike1が成功するからです

さらに、この書き込み方法は、テーブルが大きい場合、フルテーブルスキャンになるため非常に遅くなります。そのため、テーブル構造を変更することをお勧めします。


select productid, productnamefrom product where find_in_set((select cids from product where productid = '$productid'), cids)
ログイン後にコピー

テストされていない場合は、まず $productid に基づいて $cids をクエリし、次に $cids を使用して find_in_set 関数の最初のパラメータを置き換えます。
2階で述べたように、テーブルレコードが非常に大きい場合、テーブル構造を変更することをお勧めします。別のテーブルを使用して、productid と cid の対応関係を記録し、インデックスを作成します。

cids の両端の括弧を削除してください
つまり、(1,3,4) の形式を 1,3,4 の形式に変更します
次に、自己接続を使用し、find_in_set 関数を使用して、接続条件
find_in_set(T1.productid, T2.cids) および 2.productid=1 の製品 T1、製品 T2 から T1.* を選択


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート