1

テーブルの列から個別の値のリストを取得しようとしています。各列には、複数のコンマ区切り値を含めることができます。重複する値を削除して、一意の値のリストを作成したいだけです。

私は、テーブル全体を取得してから行をループし、一意の値を一意の配列に配置することで、PHPでこれを行う方法を知っています。

しかし、MySQLクエリでも同じことができますか?

私のテーブルは次のようになります。

| ID |                  VALUES                    |
---------------------------------------------------
| 1  |    Acadian,Dart,Monarch                    |
| 2  |    Cadillac,Dart,Lincoln,Uplander          |
| 3  |    Acadian,Freestar,Saturn                 |
| 4  |    Cadillac,Uplander                       |
| 5  |    Dart                                    |
| 6  |    Dart,Cadillac,Freestar,Lincoln,Uplander |

したがって、一意の値のリストには次のものが含まれます。

  • アカディア人
  • キャデラック
  • ダート
  • フリースター
  • リンカーン
  • 君主
  • 土星
  • アップランダー

これはMySQL呼び出しだけで実行できますか、それともPHPの並べ替えも必要ですか?

ありがとう

4

2 に答える 2

1

なぜこのようなデータをデータベースに保存するのですか?そもそも、データベースを使用したいすべての広範なクエリ機能を意図的に無効にします。代わりに、次のようなテーブルを用意してください。

| valueID | groupID |   name     |
----------------------------------
|    1    |    1    |  Acadian   |
|    2    |    1    |  Dart      |
|    3    |    1    |  Monarch   |
|    4    |    2    |  Cadillac  |
|    2    |    2    |  Dart      |

マシューの提案とは異なるvalueIDことに注意してください。Dartこれは、同じ値が同じvalueIDを持つことです(後でこれらを参照することをお勧めします。また、先を考えないという同じ間違いを犯したくないですか?)。次に、主キーにvalueIDとgroupIDの両方が含まれるようにします。

次に、実際の質問に答えるために、このクエリを通じてすべての個別の値を取得できます。

SELECT name FROM mytable GROUP BY valueID

(ここでは、テーブルスキャンを実行する必要がないため、GROUP BYよりもパフォーマンスが向上するはずです)DISTINCT

于 2012-12-25T11:43:42.693 に答える
0

一時テーブルを選択(および分割)してから、それに対して呼び出しを行うことをお勧めします。

まず、MySQL http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/には明らかに分割関数がありません(これは3年前なので、変更された場合は誰かがコメントできますか?)

すべてを一時テーブルにプッシュし、そこから選択します。

これらを次の構造のテーブルに分割できるとよいでしょう。

| ID |                  VALUES                    |AttachedRecordID |
---------------------------------------------------------------------
| 1  |    Acadian                                 |        1        |
| 2  |    Dart                                    |        1        |
| 3  |    Monarch                                 |        1        |
| 4  |    Cadillac                                |        2        |
| 5  |    Dart                                    |        2        |

于 2012-12-20T21:31:11.530 に答える