PDA

View Full Version : سوال: ادغام چند نتيجه دستور select با هم



dr-solomons
جمعه 13 آذر 1388, 10:12 صبح
با سلام
آيا ميشه كه چند نتيجه دستور select در sql رو با هم ادغام كرد و نشون داد
مثلا در سرچ يك سايت با select بگيم x رو سرچ كنه بعد در رشته sql ديگر بگيم y رو هم سرچ كنه و بعد ركوردهاي يافت شده را به ركوردهاي نتيجه x اضافه كنيم
مي دونم ميشه تو آرايه ريخت ولي بدون آرايه مي خوام با دستور mysql_num_rows تعداد اجتماع نتيجه ها رو ببينم

آيا ميشه؟
با تشكر فراوان

metal gear solid 4
جمعه 13 آذر 1388, 10:27 صبح
دقیق نفهمیدم ولی میشه از دستور UNION ALL استفاده کنی.
مثلاً

$SelectQuery="Select * from table1
UNION ALL select * from table2";
$SelectResult=mysql_db_query($databasename,$Select Query,$connection);

بعد هم با یک دستور while اطلاعات رو نشون میده همه رو با هم . میتونی تعدادشون رو هم با دستور mysql_fetch_rows به دست بیاری.

s_salavati2002
جمعه 13 آذر 1388, 11:00 صبح
شدیدا پیشنهاد می کنم از union وقتی استفاده کن که می خوای یه کار کوچیک بدی، دستور سنگینیه
سعی کن از یک select استفاده کن حتی اگر لازم شد رو معماری دیتابیست تجدید نظر کن

payamsp
جمعه 13 آذر 1388, 12:02 عصر
تابع mysql اين قابليت رو فكر نمي كنم داشته باشه اما با mysqli اين امكان وجود داره كه چند تا كوئري رو همزمان اجرا كنيد براي اين كار بايد از تابع mysqli_multi_query استفاده كنيد براي اطلاعات بيش تر لينك زير رو ببينيد
http://www.php.net/manual/en/mysqli.multi-query.php

metal gear solid 4
جمعه 13 آذر 1388, 13:21 عصر
میشه فکر کنم از این روش هم استفاده کرد ولی خودم تست نکردم

اینکه دو تا جدولتو با هم cross join کنی


$Query="select * from table1 cross join table2 ";

Reza1607
جمعه 13 آذر 1388, 14:44 عصر
از دستور select تودرتو استفاده کن

dr-solomons
جمعه 13 آذر 1388, 19:02 عصر
با سلام و تشكر از دوستان
--با mysqli نميشه چون سايت من با mysql كار مي كنه و راه حل ديگه اي هم هست
--Reza1607 گفتند از select تو در تو ، ميشه بگين چطوره؟
در ضمن من نتيجه رو از يه جدول ميخوام

در كل من مي خوام به فرض اگر (if) اتفاقي افتاد با select يه سري ركورد در متغير $query بذاره
و در ادامه بارها اگر (دستور if) اتفاقهاي ديگه اي افتاد select هاي ديگه اي اجرا بشه و از همون جدول يا جدول ديگه يه سري ركوردهاي ديگه اي به متغير $query اضافه كنه
در نهايت با دستور mysql_num_rows تعداد همه رو بگه و بتونم همه ركوردها رو ليست كنم
براي استفاده در يك advance search
حتما راه حل ساده تري از امكانات sql مثل join و UNION ALL هست

با تشكر فراوان

امیـرحسین
جمعه 13 آذر 1388, 23:35 عصر
با کامای ساده هم میشه:
SELECT
tbl1.id ,
tbl2.name ,
tbl3.*
FROM
table1 tbl1,
table2 tbl2,
table3 tbl3
WHERE
tbl1.id = 5 AND
tbl2.name = 'AHHP' AND
tbl3.age > 18

Reza1607
شنبه 14 آذر 1388, 00:14 صبح
با سلام و تشكر از دوستان
--با mysqli نميشه چون سايت من با mysql كار مي كنه و راه حل ديگه اي هم هست
--Reza1607 گفتند از select تو در تو ، ميشه بگين چطوره؟
در ضمن من نتيجه رو از يه جدول ميخوام

در كل من مي خوام به فرض اگر (if) اتفاقي افتاد با select يه سري ركورد در متغير $query بذاره
و در ادامه بارها اگر (دستور if) اتفاقهاي ديگه اي افتاد select هاي ديگه اي اجرا بشه و از همون جدول يا جدول ديگه يه سري ركوردهاي ديگه اي به متغير $query اضافه كنه
در نهايت با دستور mysql_num_rows تعداد همه رو بگه و بتونم همه ركوردها رو ليست كنم
براي استفاده در يك advance search
حتما راه حل ساده تري از امكانات sql مثل join و UNION ALL هست

با تشكر فراوان

حالا فهمیدم منظورت چیه با این دستور می تونی شرطها تو چک کنی
SELECT IF (expr1,expr2,expr3)
که شرطتو به جای expr1 میذاری اگه شرط درست بود مقدار expr2 و اگه اشتباه بود expr3 اجرا می شه
فقط یادت باشه این دستور برایSELECT کار می کنه
اگه MySQL Query Browser رو نصب کنی می تونی از Manual اش استفاده کنی (اینم قسمتی که دستور IF رو توضیح داده :
Functions\Control Flow Functions\IF(expr1,expr2,expr3)
دقیقاً یک چیزی تو if یک خطی