PDA

View Full Version : اجرای دو دستور sql و خواندن اونها



roze_sepideh
دوشنبه 02 مهر 1386, 02:03 صبح
فرض کنید ما دو SELECT رو میخوایم با یه کانکشن انجام بدیم و بعد در PHP بخونم....
من نمیتونم دو تا دستور رو همزمان اجرا کنم ، خطا میگیرم آیا اصلا شدنی هست؟

ali_sed
دوشنبه 02 مهر 1386, 11:27 صبح
برای تلفیق جواب های دو پرسش از دستور UNION استفاده کنید


select * from table1 where id='7' union select * from table1 where id='4'

cybercoder
دوشنبه 02 مهر 1386, 11:50 صبح
من نمیتونم دو تا دستور رو همزمان اجرا کنم ، خطا میگیرم آیا اصلا شدنی هست؟

یه جای کار اشتباه می کنی شدنی هست ( البته اگه منظورت از همزمان به صورت Sequential است )
در صورتی که بخوای به صورت موازی این کار رو بکنی ( که فکر کنم بعیده) من نمی دونم که کامپایلر PHP می تونه این کار رو بکنه یا نه!

ولی اگر تاپل های هر دو نتیجه پرس و جو رو می خوای یه جا بیاری از راهی که دوستمون گفت استفاده کن.

موفق باشی

jhoseinii
دوشنبه 02 مهر 1386, 19:57 عصر
خوب برای این مثال:

select * from table1 where id='7' union select * from table1 where id='4'
که میشه از

select * from table1 where (id='7' or id='4')
هم استفاده کرد
میشه بیشتر در مورد union توضیح بدید؟
مثلا این کامند کار میکنه؟:

select * from table1 where id='7' union select * from table2 where id='4'
http://www.pic4ever.com/images/297.gif

jhoseinii
دوشنبه 02 مهر 1386, 20:05 عصر
اگه چیزی شبیه به mysqli_multi_query (http://ir.php.net/manual/en/function.mysqli-multi-query.php)توی MySQL داشتیم این مشکل ساده تر حل میشد، همچین دستوری تو mysql نیست؟ http://www.pic4ever.com/images/164.gif

roze_sepideh
دوشنبه 02 مهر 1386, 20:06 عصر
ببینید در SQL Server و ASP.NET به فرض ما در یک Stored Procedure میایم دو تا Select جدا گانه میزنیم و دو تا Table برگردونده میشه. مثلا:


SELECT * FROM myTable

SELECT COUNT(*) FROM myTable


همچین چیزی مد نظر من هست.

ali_sed
شنبه 14 مهر 1386, 14:21 عصر
می بخشید دیر شد مطلب آماده کردم ولی وقت نشد انیجا بزارم
شما با استفاده از تابع mysqli_multi_query می توانید این کار را بکنید ولی متاسفانه برخی از سرورها بروز نیستند و از این دستور نمی شه استفاده کرد ولی اگه سرور شما از mysqli پشتیبانی می کنه می توانید از نمونه کد زیر استفاده کنید که از راهنمای php گرفته شده.


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* execute multi query */
if (mysqli_multi_query($link, $query)) {
do {
/* store first result set */
if ($result = mysqli_store_result($link)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
/* print divider */
if (mysqli_more_results($link)) {
printf("-----------------\n");
}
} while (mysqli_next_result($link));
}

/* close connection */
mysqli_close($link);
?>


و این توضیحم بدم که اجرای چند دستور همزمان و سپس خوندن تک تک آنها سریعتر از اجرای پرس و جو از دیتا بیس بصورت دستی می باشد.با یه برنامه ساده که 100 پرس و جو را اجرا می کرد اجرای همزمان آنها تقریبا 2 تا 3 برابر سریعتر از حالت اجرا بصورت تک به تک بود

peyman1987
شنبه 14 مهر 1386, 16:55 عصر
دوست عزیز ایشون فرمودن که با MySQL میخوان کار کنن نه با MySQLI.
درباره Union هم فکر میکنم در صورتی جواب میده که تعداد فیلدهای هر دو جدول استفاده شده یکی باشه.

ali_sed
سه شنبه 17 مهر 1386, 16:22 عصر
بله حق با شماست من دقت نکردم ولی خوب امیدوارم به درد دیگران بخوره

roze_sepideh
شنبه 21 مهر 1386, 04:03 صبح
بله Union وقتی جواب میده که فیلدا یه جور باشن....
خوب یعنی هیچ راهی نیست؟؟؟ باید دو بار Select جداگانه زد؟

peyman1987
شنبه 21 مهر 1386, 11:18 صبح
بله باید دو تا Select جداگانه بزنین.