PDA

View Full Version : دو دستور سلكت همزمان براي يك جدول



دوست دوست
سه شنبه 23 مهر 1392, 02:07 صبح
سلام

ميخوام دو مقدار از كوئري هاي مختلف رو از يك جدول در صفحه نمايش بدم .

براي مثال بگم

در بالاي صفحه : تعداد نمايش صفحه در جدول 1

در پايين صفحه : تعداد پاسخ در جدول 1

حالا اگر دو بار سلكت بزنم و جدول رو باز كنم آيا تاثيري در روند كار و سرعت بانك اطلاعاتي داره ؟

ايا راهي براي كش اطلاعات يك جدول و فراخواني اطلاعات وجود داره ؟ كه روي سرعت و دقت كار تاثير منفي نداشته باشه ؟

به غير از ايندكس

espootin
سه شنبه 23 مهر 1392, 09:58 صبح
سلام.
نمی توان به صراحت جواب داد چرا که همه چیز بستگی به طراحی دیتابیستون و حجم داده هاتون داره.
لطفا بیشتر توضیح دهید و در صورت امکان اسکیما دیتابیستون را قرار دهید و همچنین مقدار داده هایی که جدول می تواند بپذیرد را بیان کنید.

دوست دوست
دوشنبه 29 مهر 1392, 22:42 عصر
با سلام و سپاس از توجه شما

ببينيد براي مثال اين جدول


`id` int(11) NOT NULL AUTO_INCREMENT,
`azad` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`subject` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`text` text CHARACTER SET utf8 COLLATE utf8_persian_ci,
`visit` varchar(255) COLLATE utf8_unicode_ci NOT NULL,


من ميخوام ارسالها رو يكبار در بالاي صفحه بر اسال موضوع
و بار دوم در پايين صفحه بر اساس تعداد مشاهده ليست كنم .
مثلا 15 ارسال اخير بر اساس حروف الفبا
و 15 ارسال اخير بر اساس تعداد مراجعه يا مشاهده ...

حالا ميام كانكت ميزنم :
براي بالاي صفحه


$res = mysql_query("select subject from topic order by subject limit 15");
if (mysql_num_rows($res)>0) { $ctr = 0;
while ($row=mysql_fetch_array($res)) {
$ctr = $ctr+1;


echo "subject";
if ($ctr == 16) {
break;
}
}
}


و اين پايين صفحه و تعداد نمايش :



$res = mysql_query("select subject from topic order by visit limit 15");
if (mysql_num_rows($res)>0) { $ctr = 0;
while ($row=mysql_fetch_array($res)) {
$ctr = $ctr+1;


echo "subject";
if ($ctr == 16) {
break;
}
}
}


حالا ميخوام بدونم ايا با دو بار سلكت به تعداد كانكتور ها اضافه ميشه
و ايا راهي براي يكبار انتخاب و نمايش بر اساس موارد دلخواه وجود داره ؟؟

تعداد كانكت رو 50 در نظر بگيريم

خيلي ممنونم

espootin
دوشنبه 29 مهر 1392, 23:50 عصر
سلام.
با توجه به گفته شما « 15 ارسال اخير »، نیازی نیست که دو بار کوری بزنید ، بلکه با توجه به آی دی، می توانید ۱۵ ارسال اخیر را برگردانید ، مانند زیر


select subject, visit from topic order by id desc limit 15


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

به این ترتیب سرعت بالاتری خواهید داشت. چرا که یکبار توی SQL‌ مرتب سازی خواهید داشت و برای مرتب سازی از ایندکس استفاده خواهید کرد. و در ضمن مرتب سازی 15 رکورد در PHP هم بسیار سریع خواهد بود.

دوست دوست
چهارشنبه 01 آبان 1392, 23:30 عصر
با سلام

سپاسگزارم
اما اين ليست تنها بر اساس ايدي ميشه .

من ميخوام يك جا بر اساس تاريخ و جاي ديگر بر اساس تعداد پاسخ يا موضوع (حروف الفبا ) باشه .

ايا راهي داره ؟

espootin
پنج شنبه 02 آبان 1392, 11:24 صبح
نکته: همه چیز به طراحی، حجم داده هاتون و ایندکس گذاری و ... بستگی داره، در واقع این عوامل تعیین سرعت را می کنند و نمی توان تعداد کوری را به سرعت نسبت داد.
ممکنه شما ۱۰۰ کوری در یه لحظه بزنید افت سرعت نداشته باشید، ولی با یه کوری که بهینه نباشه افت سرعت داشته باشید.

اگر خیلی سرعت براتون مهم هست حتما روی فیلد های subject و visit که در مرتب سازی شرکت می کنند، ایندکس گذاری کنید.

یه دید کوچولو : اگر رکورد هاتون زیر ۵ میلیون هست ، کوری هاتون زیر یک ثانیه با وجود ایندکس اجرا خواهند شد.

در صورتی که به جواب مورد نظرتون هنوز نرسیده اید، از حجم داده هاتون و طراحیتون بیشتر شرح دهید.

دوست دوست
چهارشنبه 08 آبان 1392, 20:58 عصر
سلام مجدد
سپاس فراوان بخاطر وقتي كه گذاشتيد
و توضيحاتي كه داديد

به نظرم بهتره
همونطور كه فرمودين در صورت بالا رفتن حجم اطلاعات و ترافيك از امكانات ايندكس بهره ببرم .