1

次のような列と値を持つ[clients]という名前の次のテーブルがあります。

+--------+-----------+--------------+----------------+
| uid    | client_id | client_input |  input_value   |
+--------+-----------+--------------+----------------+
| 1      |   22      |  City        |  Seattle       |
+--------+-----------+--------------+----------------+
| 2      |   45      |  City        |  Ojai          |
+--------+-----------+--------------+----------------+
| 3      |   22      |  State       |  OR            |
+--------+-----------+--------------+----------------+
| 4      |   45      |  State       |  CA            |
+--------+-----------+--------------+----------------+
| 5      |   65      |  City        |  Orlando       |
+--------+-----------+--------------+----------------+
| 6      |   74      |  State       |  AB            |
+--------+-----------+--------------+----------------+
| 7      |   65      |  State       |  FL            |
+--------+-----------+--------------+----------------+
| 8      |   12      |  City        |  Los Angeles   |
+--------+-----------+--------------+----------------+
| 9      |   12      |  State       |  CA            |

'CA'の状態にあるinput_value列に存在するすべての都市をリストするPHP/MySqlクエリが必要です。明らかに、共通の識別子はclient_idであり、これは常に一致します。これは、clientが LosAngeles」にある場合、同じclient_idがinput_value列に「CA」の値を含む行にもあるためです。このテーブルには800万を超える行があり、パフォーマンスの高い厩舎長は高く評価されています。

私の脳が揚げられ、締め切りが近づいています。テーブルのデザインを変更できません。助けが必要です。

4

3 に答える 3

1
SELECT *
FROM table AS t1 INNER JOIN table AS t2 ON t1.client_id = t2.client_id
WHERE t1.client_input = 'City' AND t2.client_input = 'State' AND t2.input_value = 'CA'

注:これにはいくつかの調整が必要な場合があり、最適化される可能性があります。しかし、それはあなたを始めさせ、あなたの脳を冷やすはずです。

于 2012-06-12T18:39:22.473 に答える
0

このクエリはテストしていません。ただし、これまたは同様のクエリは機能するはずです。不必要な結合を避けるために、最初に2つのサブクエリを使用しました。最初のサブクエリは州「CA」をフィルタリングし、2番目のサブクエリは都市をフィルタリングします。州ごとにすべての都市のテーブルが必要な場合は、サブクエリaから「CA」句を削除します。

SELECT b.input_value AS city, a.input_value AS state
FROM 
  (SELECT client_id, input_value
   FROM tablename
   WHERE input_value = 'CA'
   AND client_input = 'State')
  AS a,
  (SELECT client_id, input_value
   FROM tablename
   WHERE client_input = 'City')
  AS b
WHERE a.client_id = b.client_id
于 2012-06-12T18:42:31.817 に答える
0
SELECT distinct 
      t2.Input_Value as City
   from
      YourTable t1
         JOIN YourTable t2
            on t1.client_ID = t2.Client_ID
           AND t2.client_input = 'City'
   where
          t1.client_input = 'State'
      AND t1.Input_Value = 'CA'

2つのインデックスがあります...(Client_Input、Input_Value)と(Client_ID、Client_Input、Input_Value)

于 2012-06-12T18:46:53.620 に答える