Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डेटाबेस ईएवी मॉडल, खोज के अनुसार रिकॉर्ड लिस्टिंग

EAV डिज़ाइन है असामान्य। यानी यह एक गैर-संबंधपरक डिजाइन है। सामान्यीकरण का कोई नियम नहीं है जो आपको 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utf8_unicode_ci और utf8_unicode_520_ci . में क्या अंतर है?

  2. MySQL:अल्पविराम से अलग की गई सूची को कई पंक्तियों में विभाजित करें

  3. MySQL स्ट्रिंग में किसी विशेष वर्ण के हर दूसरे उदाहरण को कैसे बदलें?

  4. एसक्यूएल स्क्रिप्ट - क्या #define के बराबर मौजूद है?

  5. PHP तालिका (दिनांक) वैधता के आधार पर गतिशील रंग परिवर्तन