سلام و درود بنده یک تاپیک باز کرده بودم با عنوان "توضیح بیشتر در رابطه به relation"
متاسفانه دستم خورد و تاپیک و بستم که به نظرم باید کسی که تاپیک و باز کرده بتونه خودش روی باز و بسته شدن تاپیک مدیریت داشته باشه که متاسفانه اینجوری نیست
تشکر میکنم از جناب صالحی عزیز به خاطر وقتی که گذاشتن و جواب سوال بنده را کامل دادن
یک سوالی پرسیده بودن که بنده به نوبه خودم جواب میدم حالا دوستان دیگه هم اگر دوست داشتن نظراتشون و بفرماییند
========================== سوال جناب صالحی============================
حالا شما کوئری زیر رو به عنوان تمرین اینجا برامون بگید که چی کار میکنه ;-)
سایر دوستان هم خواستن مشارکت کنن...
کوئری جالبیه و ذهن رو بخوبی درگیر میکنه البته ساده هم هست با ظاهری نسبتا پیچیده و گول زننده :-)
در ضمن یه نکته داره تفاوت LIKE با = و نقیضشون رو هم بگید NOT LIKE با =!
$args = array(
'post_type' => 'product',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'color',
'value' => 'orange',
'compare' => '=',
),
array(
'relation' => 'AND',
array(
'key' => 'color',
'value' => 'red',
'compare' => '=',
),
array(
'key' => 'size',
'value' => 'small',
'compare' => '=',
),
),
),
);
$query = new WP_Query( $args );
=========== جواب بنده :
آرایه اول و آرایه دوم میتونه یکیشون هم صدق کند که کوئری جواب داشته باشه چون از OR استفاده کردیم (یعنی میتونه یا اولی و یا دومی و یا هردو درست باشه)
آرایه اول میگه : color باید دقیقا مساوی نارنجی باشه
آرایه دوم که خودش از ۲ آرایه تشکیل شده و شرط بین ۲ آرایه داخلی هم "باید" بر قرار باشه چون از AND استفاده کردیم
و آرایههای داخلی هم میگویند :
اولین آرایه داخلی میگه : color دقیقا باید مساوی قرمز باشه
دومین آرایه داخلی میگه : size دقیقا باید مساوی small باشه
و این دو آرایه داخلی همان طور که عرض کردم باید جفتشون برقرار باشند چون از AND استفاده شده
-- تفاوت بین Like و = :
- like یعنی شبیهشم بود پیدا کن , مثلا ما داخل یک سرچ دنبال ایمیل کاربرانی میگردیم که اول ایمیلشون با a شروع شده باشه
هم alireza@gmail.com را میاورد هم atefe@gmail را میاورد
** البته میتونیم هم بنویسیم که اولش مثلا با a شروع شه ما بقیه کلماتش هرچی بود
و هم میتونیم بنویسیم که مثلا با a تمام شه و حالت مختلف دیگه هم داره که داکیومنت sql اون در آدرس ذیل هست
https://www.w3schools.com/sql/sql_like.asp
- = (مساوی) : یعنی دقیقا باید همون کلمه باشه , دقیقا خلاف توضیح بالایی , یعنی باید دقیقا بنویسیم که دنبال مثلا کاربر alireza@gmail.com هستیم وگرنه کوئری برامون چیزیو نمیآورد.
-- تفاوت بین NOT LIKE و =! :
- NOT LIKE : یعنی شبیهش نباشد , مثلا اگر ما در سناریو بالا که عرض کردم سرچ داریم و دنبال ایمیل کاربری میگردیم که با a شروع شده باشد ,
اگر از NOT LIKE استفاده کنیم دیگه alireza@gmail.com و atefe@gmail.com را نمیاورد , "ولی همه ایمیلهای دیگرو میاورد"
- =! : یعنی دقیقا اون کلمه و یا شرطی که گذاشتیم نباشد مثلا اگر ما داخل کوئری بزنیم دنبال کاربرانی میگردیم که مثلا سنشون ۳۰ نباشه
وقتی از "=!" استفاده کنیم :
همه ی کاربرانی را که سنشون ۳۰ نیست را میآورد
یعنی مثلا کسانی که ۳ سالشون هست را میآورد ۲۹ و ۲۸ و ۳۱ و ۳۲ و .....
به جز کسانی که ۳۰ سالشون هست
توضیحات بالا را با حالتهای زیر میتونیم داخل سایت w3schools.com تست و اجرا کنیم و نتایج و ببینیم
تست حالتهای مختلف با کوئریهای زیر : https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_like
حالت اول LIKE : که از ۹۱ کاستومری که دیتابیسش داره فقط ۴ تا رو میآورد که با a شروع شده باشد .
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';
حالت دوم NOT LIKE : که از ۹۱ کاستومری که دیتابیسش داره همرو میآورد به جز اون ۴ تایی که از این پترن پیروی میکنند . (نتایج رو با حالت بالا مقایسه کنید)
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';
حالت سوم = (مساوی) : که از ۹۱ کاستومری که دیتابیسش داره فقط ۱ دونه کوئری بر میگردونه که دقیقا باید
"Alfreds Futterkiste" کلمه باشد
(یعنی حتی اگر به جای کلمه کامل "Alfreds Futterkiste" کلمه ی "Alfreds" را فقط بنویسیم هم , چیزی برامون بر نمیگرده فقط باید کاملا تطابق داشته باشد )
SELECT * FROM Customers
WHERE CustomerName = 'Alfreds Futterkiste';
حالت چهارم =! : که از ۹۱ کاستومری که دیتابیسش داره , همرو برمی گردونه جز کسی که اسمش دقیقا
"Alfreds Futterkiste" باشد
SELECT * FROM Customers
WHERE CustomerName != 'Alfreds Futterkiste';
در آخر امیدوارم توضیحاتم مفید بوده باشد , با تشکر