PDA

View Full Version : گفتگو: سرچ در چند تیبل با یک کوئری - PHP+MySQL



DelDard
یک شنبه 22 اسفند 1395, 17:27 عصر
جواب این سوال رو که چطور با یک کوئری (به روش LIKE %K) بشه چند تیبل رو مورد جست و جو قرار داد رو اینجا تو استکاورفلو (http://stackoverflow.com/questions/6574564/php-mysql-search-multiple-tables-using-a-keyword) پیدا کردم ولی یه مشکلی دارم باش.

توی همون بهترین جواب که بیشترین رای رو گرفته فقط 2 تا ستون رو از هر تیبل select کرده حالا اگه بخوام همه ستون ها رو سلکت کنم (یعنی از * استفاده کنم) ارور میده.

کدی که توی جواب هست:


$query = "(SELECT content, title, 'msg' as type FROM messages WHERE content LIKE...

کدی که من مینویسم:


$query = "(SELECT * , 'msg' as type FROM messages WHERE content LIK....

اروری که بهم میده:


Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[21000]: Cardinality violation: 1222 The used SELECT statements have a different number of columns' in C:\xampp\htdocs\proj13\search.php:34 Stack trace: #0 C:\xampp\htdocs\proj13\search.php(34): PDO->prepare('(SELECT * , 'ms...') #1 {main} thrown in C:\xampp\htdocs\proj13\search.php on line 34


دوستان میشه راهنمایی بفرمایید که چطور 'kind' as type رو حفظ کنم بدون اینکه کوئری خراب بشه؟ یعنی هم type معلوم باشه هم مجبور نباشم اسم تک تک ستون ها رو وارد کنم و بشه بجاش * زد.
البته لازم به ذکره جای قرار گیریه somekind as type رو عوض کردم چند بار، مثلا گذاشتم آخر هر کوئری، ولی هر بار یه ارور متفاوت میداد.

ولی خب اصراری هم نیست حتما از این روش کوئری بزنم. اگه روشی دیگری هم بلدید برای این کار بگید ممنون میشم

تشکر از وقتی که گذاشتید دوستان.

-----------------------------------------------------------------------------------------------------
Update 1

دوستان این که چرا ارور میده رو فهمیدم. باید تعداد ستون هایی که سلکت میکنیم تو هر کدوم از تیبل ها یکی باشه:
There must be same number of expressions in both SELECT statements. (https://www.techonthenet.com/mysql/union.php)

خب مشکلی که هست من مثلا تو تیبل اولم 10 تا ستون دارم و همشم میخام و تو تیبل دوم فقط 5 تا ستون دارم و تعدادیشو میخام خب حالا نمیشه که یک تعداد ستون رو از هر تیبل فراخانی کنم.
به نظرتون با چه کوئری ایی میتونم این مشکل رو حل کنم؟ چه طور با یک کوئری چند تیبل رو سرچ کنم؟

باز هم ممنون