نیاز به یک query

amirepsilon

Active Member
سلام
دوستان فکر کنید یک جدول اخبار داریم
من میخوام 5 خبر تصادفی از 20 خبر آخر این جدول رو در بیارم
چه کوئری باید بنویسم ؟
ممنون
 

Domanjiri

Well-Known Member
سلام

راه های مختلفی وجود داره که هر کدوم ویژگی هایی داره که در برخی موارد مجبور میشیم فقط از همون روش استفاده کنیم.

ولی در حالت کلی و برای کار شما یک راه مناسب این کوئری هست:
PHP:
SELECT * FROM table ORDER BY RAND() LIMIT 5

بدیهیه که به جای 5 هر عددی که دلتون می خواد می تونید بزارید.

این روش برای تیبل های بسیار بزرگ کمی نامناسب هست(یادتون باشه چند هزار سطر حتی تیبل بزرگ هم نیست) که جاش اینجا نیست که توضیح بدم.

موفق و پیروز باشید.
 

amirepsilon

Active Member
ظاهرا سوال منو متوجه نشدید!
شما 5 تا خبر تصادفی از کل اخبار آوردید!
ولی من 5 خبر تصادفی از 20 خبر آخر رو میخوام!
 

Domanjiri

Well-Known Member
بازم سلام

معذرت می خوام، سوالتون رو سریع خوندم و درنتیجه خوب دقت نکردم.

بفرمایید:

PHP:
(
SELECT *
FROM table
ORDER
BY date_field DESC
LIMIT 20
)
ORDER
BY RAND( )
LIMIT 5

اگه از نسخه قدیمی mysql استفاده می کنید ممکنه که پرسش بالا اجرا نشه، اونوقت باید 20 تا سطر آخر رو بصورت رندم بخونید و فقط 5 تا از اونا رو نشون بدین، یا راه های دیگه که بخشی از کار رو در PHP انجام بدبد.

پیروز باشید.
 

MMSHFE

Active Member
با سلام، اين كد رو امتحان كنيد، فكر كنم توي همه نسخه هاي MySQL به درستي كار كنه:
کد:
SELECT *
FROM
    (SELECT *
    FROM `table`
    ORDER BY `id` DESC
    LIMIT 20)
    AS `temp`
ORDER BY RAND()
LIMIT 5
موفق باشيد.
 

Domanjiri

Well-Known Member
با سلام، اين كد رو امتحان كنيد، فكر كنم توي همه نسخه هاي MySQL به درستي كار كنه:
کد:

SELECT *
FROM
(SELECT *
FROM `table`
ORDER BY `id` DESC
LIMIT 20)
AS `temp`
ORDER BY RAND()
LIMIT 5

موفق باشيد.

درود بر شما

بعید می دونم، چون ارور اجرا نشدن دستوری که بنده نوشتم اینه که مثلن نسخه فلان از Mysql از LIMIT توی ساب کوئری (زیر پرسش !) پشتیبانی نمی کنه و دستور شما هم...

البته دیگه الان اکثر سرورها Mysql نسخه 5 به بالا روشون نصب هست و مشکلی نیست.

در ضمن خدمت amirepsilon عرض کنم که با توجه به حجم جدول و ساختار اون و قدرت سرورتون ممکنه بهتر باشه که کمی از PHP کمک بگیرید

موفق و شاد باشید.
 

D.A.V.O.O.D

Member
سلام ،
پیشنهاد من اینه که 20 خبر آخرت را دربیاری و همه را درون یک آرایه بریزی و با استفاده از shuffle آرایه را بهم بریزی و 5 تای اول آریه را بخونی .
 

e_e2008

New Member
کاملا با D.A.V.O.O.D موافق هستم
شما باید 20 تا رکورد آخر رو از دیتابیش بگیری بعد اطلاعات دریافتی (آرایه ) رو به صورت رندوم بخونی
 

جدیدترین ارسال ها

بالا