sql >> データベース >  >> RDS >> Mysql

データベースEAVモデル、検索ごとのレコードリスト

    EAVデザインは 非正規化。つまり、それは非リレーショナル設計です。 EAV設計を使用するように導く正規化の規則はありません。

    SQLでは、クエリを作成するときに列を知っている必要があります。また、結果セットのすべての行に同じ列がある必要があります。 EAVを使用する場合、アイテムごとのフィールド数がわからない場合の唯一の解決策は、列ではなく行としてそれらをフェッチすることです。

    SELECT i.ItemID, i.ItemName, f.FieldName, v.Value
    FROM Items i
    JOIN FieldsValues v4 ON (v4.ItemID, v4.FieldID, v4.Value) = (i.ItemID, 4, TRUE)
    JOIN FieldsValues v ON i.ItemID = v.ItemID
    JOIN Fields f ON v.FieldID = f.FieldID;
    

    アプリケーションで行を処理する必要があります。たとえば、PHPの場合:

    <?php
    
    $pdo = new PDO(...);
    $sql = "...above query...";
    
    $collection = array();
    
    foreach ($pdo->query($sql) as $row) {
      $id = $row["ItemID"];
      if (!array_key_exists($id, $collection)) {
        $collection[$id] = new stdClass();
        $collection[$id]->Name = $row["ItemName"];
      }
      $collection[$id]->$row["FieldName"] = $row["Value"];
    }
    

    これでオブジェクトの配列ができました。各オブジェクトはデータベースのアイテムに対応しています。各オブジェクトには、それぞれ独自のフィールドのセットがあります。




    1. 列の値に%signinmysqlが含まれているレコードを検索します

    2. MyCLI –オートコンプリートと構文強調表示を備えたMySQL /MariaDBクライアント

    3. ブタで同等のグループコンキャット?

    4. 同じテーブルで更新した後、トリガーでテーブルを更新しています