0

ちょっと説明が難しい (mysql) sql クエリの質問があります。

パラメータ値と、パラメータ値が関連付けられているケースIDを格納するデータベーステーブルがあります。

外部キーはparent_idで、各親は可変数のパラメータを持つことができます。

これは、3 つのパラメーターがある場合、3 つの行、4 つのパラメーター、4 つの行などがあることを意味します。

同じ親に対して複数のエントリが存在する場合もあります。ケース ID を取得するには、その親のすべてのパラメーターのパラメーター VALUE を比較する必要があります。表は次のようなものです。

テーブルケース

id      param_value param_id parent_id caseID
----------------------------------------------
1       red          101         200     1234
2       pepper       102         200     1234
3       green        101         200     3456
4       pepper       102         200     3456
5       pink         205         250     9875
6       panther      206         250     9875
7       fuzzy        207         250     9875

上記の例: 親には 200 と 250 の 2 つの異なるタイプがあります。200 には、2 つのケース ID に対して 2 つのセットがあります。

1234 : パラメータ 101 = 赤、パラメータ 102 = ペッパー

3456 : パラメータ 101 = 緑およびパラメータ 102 = ペッパー

3 番目の親は別の親であり、たまたま 3 つのパラメーターを持っています (さらに多くのパラメーターを持つこともできます!)。

したがって、親が誰であるか、その親のパラメーター ID がわかり、パラメーター値がわかり、対応するケース ID を見つける必要があります。

次のようなselectを使用して2つのパラメーターを使用してこれを行うことができます。

SELECT c1.caseId from case c1
INNER JOIN case c2 ON c1.caseId=c2.caseID
WHERE c1.param_id=101 and c1.param_value='red'
AND c2.param_id=102 and c1.param_value='pepper';

(これは caseId = 1234 を返します)

しかし :

  1. SQL だけを使用すると、2 つ以上の内部結合でこれを行う方法がわかりません (したがって、3 つのパラメーターを持つピンク パンサーに対して同様の要求を行うことはできません)。可変数のパラメーターを使用して SQL クエリを作成する方法を知る必要があります。

  2. Zend の生の SQL でこれを行うことができますが、php Zend でこれを行う方法があれば、私はすべて耳にします!

4

1 に答える 1