0

私のプログラムでは、SQL クエリを起動し、結果リソースを取得します。次に、mysql_fetch_array() 関数を使用してこの結果リソースの行を繰り返し処理し、各行のフィールドの内容を使用してさらに SQL クエリを作成します。

この 2 番目のクエリを起動した結果が、必要な最初の結果セットです。ただし、これを行うことによって生成される結果の数は多くないため、クエリの作成に使用された最後のレコードを削除して、検索をより具体的にしたいと考えています。

たとえば、必要な結果の最初のセットを生成するクエリは次のようになります。

 SELECT uid FROM users WHERE (gender=male AND relationship_status=single 
AND shoe_size=10)

次に、最後のレコードを削除して、クエリが次のようになるようにします。

SELECT uid FROM users WHERE (gender=male AND relationship_status=single)

最初のクエリを生成するコードは既に作成していますが、前述のように、mysql_fetch_array 関数を使用してすべてのレコードを反復処理します。後続の「ラウンド」では、クエリの具体性が低くなるように、連続して少ないレコードのみを反復処理したいと考えています。これどうやってするの?

これも非常に非効率的な方法のように思えます。そのため、より効率的になるような簡単なアイデアを歓迎します。

編集:返信ありがとうございます-ええ、私は実際に私のプログラムでこれを行っています。私は基本的に、ユーザーがDBで指定したすべての設定を取得し、それを使用してそれらの設定を持つ人を探すためのクエリを形成することにより、基本的な検索アルゴリズムを実装しようとしています. そのため、すべての条件を使用して最初に検索し、次に 1 つ少ない条件を使用して検索を試行し、以前に返されたユーザー ID を無効にします。現時点では、「ラウンド」ごとにゼロからクエリを作成していますが、最後のクエリを使用してこれを行う方法を見つけたいと考えています

4

1 に答える 1

0

上記のクエリを使用すると、次のことができます。

SELECT uid 
FROM users 
WHERE uid NOT IN (
        SELECT uid 
        FROM users 
        WHERE 
        (gender=male 
        AND relationship_status=single 
        AND shoe_size=10)
        )

これにより、基本的に最初のクエリがサブクエリになり、それを使用して返された結果が否定されます。つまり、最初のクエリではなく、すべての行を返します。

于 2012-08-18T14:35:09.080 に答える