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

IN . का उपयोग करके एकाधिक मेटा कुंजी/मूल्य जोड़े के आधार पर WP पोस्ट प्राप्त करें

आपको post_meta . में शामिल होना होगा दो बार तालिका। यहाँ कुछ डेटाबेस सिद्धांत है।

जब आप तालिकाओं में शामिल होते हैं, तो सिद्धांत रूप में एक अस्थायी तालिका में पहली तालिका के सभी आइटम शामिल होते हैं, दूसरी तालिका के सभी आइटमों के साथ मिलकर बनाया और फ़िल्टर किया जाता है। इसलिए, उदाहरण के लिए, यदि आपके पास प्रति पोस्ट सिर्फ 1 मेटा आइटम है, और आपके पास 3 पोस्ट हैं तो आपके पास

+-------+----------+
|post_id|post_title|
+-------+----------+
|   1   | 'Post 1' |
|   2   | 'Post 2' |
|   3   | 'Post 3' |
+-------+----------+

और

+-------+----------+----------+------------+
|meta_id| post_id  | meta_key | meta_value |
+-------+----------+----------+------------+
|   10  | 1        |  k1      | v1         |
|   11  | 2        |  k1      | v2         |
|   12  | 3        |  k1      | v3         |
+-------+----------+----------+------------+

और "सैद्धांतिक" अस्थायी सम्मिलित तालिका है:

+---------+------------+----------+----------+-----------+-------------+
|p.post_id|p.post_title|pm.meta_id|pm.post_id|pm.meta_key|pm.meta_value|
+---------+------------+----------+----------+-----------+-------------+
|   1     | 'Post 1'   |   10     | 1        |  k1       | v1          |
|   1     | 'Post 1'   |   11     | 2        |  k1       | v2          |
|   1     | 'Post 1'   |   12     | 3        |  k1       | v3          |
|   2     | 'Post 2'   |   10     | 1        |  k1       | v1          |
|   2     | 'Post 2'   |   11     | 2        |  k1       | v2          |
|   2     | 'Post 2'   |   12     | 3        |  k1       | v3          |
|   3     | 'Post 3'   |   10     | 1        |  k1       | v1          |
|   3     | 'Post 3'   |   11     | 2        |  k1       | v2          |
|   3     | 'Post 3'   |   12     | 3        |  k1       | v3          |
+---------+------------+----------+----------+-----------+-------------+

फिर आप कहते हैं:WHERE p.id =pm.post_id

और यह अस्थायी तालिका को फ़िल्टर करता है:

+---------+------------+----------+----------+-----------+-------------+
|p.post_id|p.post_title|pm.meta_id|pm.post_id|pm.meta_key|pm.meta_value|
+---------+------------+----------+----------+-----------+-------------+
|   1     | 'Post 1'   |   10     | 1        |  k1       | v1          |
|   2     | 'Post 2'   |   11     | 2        |  k1       | v2          |
|   3     | 'Post 3'   |   12     | 3        |  k1       | v3          |
+---------+------------+----------+----------+-----------+-------------+

तो आपके पास प्रत्येक पोस्ट + मेटा वैल्यू के लिए केवल एक पंक्ति है। आपकी क्वेरी उन पंक्तियों के लिए पूछ रही है जिनमें meta_key = category both दोनों हैं और meta_key =book_genre` जो मौजूद नहीं है।

तो आपको एक टेबल चाहिए जो postmeta . में शामिल हो दो बार में तालिका।

जब आप उनसे जुड़ते हैं तो आप तालिका को अलियासिंग करके ऐसा कर सकते हैं। मुझे सरल बनाने के लिए क्षमा करें:

SELECT wp_posts.*, pm1.*, pm2.*
FROM
  wp_posts
  wp_postmeta as pm1
  wp_postmeta as pm2
WHERE pm1.post_id = wp_posts.ID
  AND pm2.post_id = wp_posts.ID
  AND ...etc

यहां आपके पास pm1 . के लिए उपनामित पोस्टमेटा तालिका की दो सम्मिलित प्रतियां हैं और pm2 (क्योंकि उन्हें wp_postmeta . दोनों नहीं कहा जा सकता है क्वेरी में।

फिर आप निम्न के लिए पूछ सकते हैं:

AND pm1.meta_key = 'category'
AND pm1.meta_value = X
AND pm2.meta_key = 'book_genre'
AND pm2.meta_key IN (123,456)

उम्मीद है कि आप उसमें से बाकी को एक साथ जोड़ सकते हैं।

मुझे यह भी लगता है कि यदि आप उस मार्ग पर जाना चाहते हैं तो आप इसे WP_Query के साथ कर सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. संख्या मानों के लिए सेल के डेटाटाइप को टेक्स्ट के रूप में स्पष्ट रूप से सेट करें

  2. MySQL में टेबल इंजन बदलना

  3. दो संभावनाओं के समूह में अद्वितीय पंक्तियों का चयन

  4. कुल कार्यों के साथ एक MySQL क्वेरी में समूहीकृत रिकॉर्ड का पहला और अंतिम रिकॉर्ड कैसे प्राप्त करें?

  5. PHP MySQL ड्रॉप डाउन बॉक्स चयनित मान को पॉप्युलेट करें