mysql - تقسيم - كورس excel كامل




تحديد استعلام MySQL مع شروط متعددة (3)

لقد قمت بكتابة استعلام MySQL لكن يبدو أنه لا يعمل ، لأن النتيجة فارغة. هل هناك أي خطأ في الكود؟

$result = mysql_query(
     "SELECT user_id 
      FROM wp_usermeta 
      WHERE 
         (meta_key = 'first_name' AND meta_value = '$us_name') AND         
         (meta_key = 'yearofpassing' AND meta_value = '$us_yearselect') AND 
         (meta_key = 'u_city' AND meta_value = '$us_reg') AND 
         (meta_key = 'us_course' AND meta_value = '$us_course')"
);

حل ffthiella هو أنيق جدا.

إذا أردت في المستقبل إظهار أكثر من user_id فيمكنك استخدام الصلات ، وهناك في سطر واحد جميع البيانات التي تحتاجها.

إذا كنت تريد استخدام AND شروط ، وكانت الشروط في عدة أسطر في الجدول الخاص بك ، يمكنك استخدام مثال JOINS :

SELECT `w_name`.`user_id` 
     FROM `wp_usermeta` as `w_name`
     JOIN `wp_usermeta` as `w_year` ON `w_name`.`user_id`=`w_year`.`user_id` 
          AND `w_name`.`meta_key` = 'first_name' 
          AND `w_year`.`meta_key` = 'yearofpassing' 
     JOIN `wp_usermeta` as `w_city` ON `w_name`.`user_id`=`w_city`.user_id 
          AND `w_city`.`meta_key` = 'u_city'
     JOIN `wp_usermeta` as `w_course` ON `w_name`.`user_id`=`w_course`.`user_id` 
          AND `w_course`.`meta_key` = 'us_course'
     WHERE 
         `w_name`.`meta_value` = '$us_name' AND         
         `w_year`.meta_value   = '$us_yearselect' AND 
         `w_city`.`meta_value` = '$us_reg' AND 
         `w_course`.`meta_value` = '$us_course'

شيء آخر: نوصي باستخدام عبارات معدّة ، لأن الدالات mysql_* لا تقوم بحفظ SQL ، وسيتم إهمالها. إذا كنت ترغب في تغيير التعليمات البرمجية الخاصة بك أقل قدر ممكن ، يمكنك استخدام وظائف mysqli_ : http://php.net/manual/en/book.mysqli.php

توصية:

استخدم الفهارس في هذا الجدول. يوصي بشدة user_id أن يكون وفهرسته ، ويوصي أن يكون meta_key و meta_value أيضًا ، لتشغيل أسرع للاستعلام.

الشرح:

إذا كنت تستخدم AND عليك "ربط" الشروط لخط واحد. إذا كنت تريد شرط AND لخطوط متعددة ، يجب عليك أولاً إنشاء سطر واحد من أسطر متعددة ، مثل هذا.

الاختبارات: بيانات الجدول:

          PRIMARY                 INDEX
      int       varchar(255)    varchar(255)
       /                \           |
  +---------+---------------+-----------+
  | user_id | meta_key      | meta_value|
  +---------+---------------+-----------+
  | 1       | first_name    | Kovge     |
  +---------+---------------+-----------+
  | 1       | yearofpassing | 2012      |
  +---------+---------------+-----------+
  | 1       | u_city        | GaPa      |
  +---------+---------------+-----------+
  | 1       | us_course     | PHP       |
  +---------+---------------+-----------+

نتيجة الاستعلام بـ $us_name='Kovge' $us_yearselect='2012' $us_reg='GaPa' ، $us_course='PHP' :

 +---------+
 | user_id |
 +---------+
 | 1       |
 +---------+

لذلك يجب أن يعمل.


سأستخدم هذا الاستعلام:

SELECT
  user_id
FROM
  wp_usermeta 
WHERE 
  (meta_key = 'first_name' AND meta_value = '$us_name') OR 
  (meta_key = 'yearofpassing' AND meta_value = '$us_yearselect') OR 
  (meta_key = 'u_city' AND meta_value = '$us_reg') OR
  (meta_key = 'us_course' AND meta_value = '$us_course')
GROUP BY
  user_id
HAVING
  COUNT(DISTINCT meta_key)=4

سيؤدي هذا إلى تحديد جميع user_id الذي يفي بجميع الشروط الأربعة.


لديك شروط حصرية متبادلة - إذا كان meta_key "first_name" ، فلا يمكن أيضًا أن يكون "عامًا". على الأرجح تحتاج إلى AND الخاص بك لتكون OR:

$result = mysql_query("SELECT user_id FROM wp_usermeta 
WHERE (meta_key = 'first_name' AND meta_value = '$us_name') 
OR (meta_key = 'yearofpassing' AND meta_value = '$us_yearselect') 
OR (meta_key = 'u_city' AND meta_value = '$us_reg') 
OR (meta_key = 'us_course' AND meta_value = '$us_course')")




select