mysql php クエリ文の書き方

WBOY
WBOYオリジナル
2016-06-23 14:15:161114ブラウズ

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.* を選択


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。