/
  • نیاز به یک کد ...

  • ارسال پاسخ   امتیاز موضوع:
    • 2 رأی - میانگین امیتازات: 3
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی نیاز به یک کد ...
    نویسنده پیام
    troy3 آفلاین
    عضو جدید
    **

    ارسال‌ها: 10
    تاریخ عضویت: ۱۳۸۸ مهر ۱۴
    اعتبار: 0
    تشکرها : 12
    ( 3 تشکر در 2 ارسال )
    ارسال: #1
    نیاز به یک کد ...
    من یک دیتابیس دارم که در یک جدول اون 2 ستون هست . یکی title و یکی weight .

    weight هم یک عدد از 1 تا 10 هست .

    حالا یک کویری می خوام که 100% تعداد داده ها با مقدار weight=10 رو نمایش بده . بعد 90% داده ها با مقدار weight=9 و 80% با مقدار weight=8 و ...

    من برای اینکار از حلقه استفاده کردم . یعنی در واقع حلقه 10 بار یک کوئری رو اجرا میکنه .
    اما روی سرور خیلی کند می شه .

    دوستان راه حلی دارند ؟؟
    ۱۳۸۸ آبان ۲۲ ۱۰:۴۳ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Y.P.Y آفلاین
    ناظم کل
    *******

    ارسال‌ها: 2,791
    تاریخ عضویت: ۱۳۸۷ دي ۲۸
    اعتبار: 105
    تشکرها : 2183
    ( 4874 تشکر در 2229 ارسال )
    ارسال: #2
    RE: نیاز به یک کد ...
    سلام،
    در خود MySQL یک تابع درست کنید که اینکارو انجام بده... ببینید چطوره؟
    __________________________________________________________________________
    وبلاگ: Yousha.Blog.ir

    صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
    http://gulfnews.com/opinion/thinkers/ira...i-1.500997
    ۱۳۸۸ آبان ۲۲ ۱۲:۱۸ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : troy3
    troy3 آفلاین
    عضو جدید
    **

    ارسال‌ها: 10
    تاریخ عضویت: ۱۳۸۸ مهر ۱۴
    اعتبار: 0
    تشکرها : 12
    ( 3 تشکر در 2 ارسال )
    ارسال: #3
    RE: نیاز به یک کد ...
    (۱۳۸۸ آبان ۲۲ ۱۲:۱۸ عصر)Y.P.Y نوشته شده توسط:  سلام،
    در خود MySQL یک تابع درست کنید که اینکارو انجام بده... ببینید چطوره؟

    من از این کد استفاده کردم :

    کد PHP:
    for ($adsi 10$adsi >= 1$adsi --)
    {
        
    $query="select * from milad_adverts where sid='2' and typ='3' and expire>'$now' and star='$adsi$miladmedia";  
    $result=mysql_db_query($dbname,$query,$RSconn) or die(mysql_error());
    $star->$adsi=mysql_num_rows($result);

    $darsad->$adsi = ($adsi)/10;


    $adslimit->$adsi ceil($star->$adsi*$darsad->$adsi);

    $limitation $adslimit->$adsi;

    $query="select id,title from mytable where weight='$adsi' and active=1 order by Rand() LIMIT 0,$limitation";
    $result=mysql_db_query($dbname,$query,$RSconn);
    $num=mysql_num_rows($result);
    while(
    $RS=mysql_fetch_array($result))
        {
        
    $radif++;
        
    $title=$RS["title"];
        
    $id=$RS["id"];    
    }
    ?>

    اما از اونحایی که 10 بار باید احرا بشهیه کم کند شده ...

    میشه همه رو در یک کوئری آورد ؟؟

    در مورد راه کار بالا هم میشه یه کم توضیح بدین ؟
    ۱۳۸۸ آبان ۲۲ ۰۱:۰۵ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6198 تشکر در 3439 ارسال )
    ارسال: #4
    RE: نیاز به یک کد ...
    میشه با یه کوئری آورد
    کافیه فیلد weight رو sort کنین‌ بعد‌ ترتیب می افتن
    ۱۳۸۸ آبان ۲۲ ۰۱:۴۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : Y.P.Y troy3
    Y.P.Y آفلاین
    ناظم کل
    *******

    ارسال‌ها: 2,791
    تاریخ عضویت: ۱۳۸۷ دي ۲۸
    اعتبار: 105
    تشکرها : 2183
    ( 4874 تشکر در 2229 ارسال )
    ارسال: #5
    RE: نیاز به یک کد ...
    گفته Admin رو اجرا کنید... اگر نشد راه زیر رو دنبال کنید.

    کد PHP:
    <?php
    for($adsi 10$adsi >= 1$adsi --)
    {
        
    $star->$adsimysql_num_rows(mysql_db_query(&$dbname"select 1 from milad_adverts where sid= 2 and typ= 3 and expire > '$now' and star= '$adsi$miladmedia;", &$RSconn)) or exit(mysql_error());
        
    $darsad->$adsi= ($adsi) / 10;
        
    $adslimit->$adsiceil($star->$adsi $darsad->$adsi);
        
    $limitation$adslimit->$adsi;
        
    $resultmysql_db_query(&$dbname"select id, title from mytable where weight= '$adsi' and active= 1 order by Rand() LIMIT 0, $limitation;", &$RSconn) or exit(mysql_error());
        
    $nummysql_num_rows(&$result);
        while(
    $RS mysql_fetch_array(&$result))
        {
            
    $radif ++;
            
    $title$RS['title'];
            
    $id$RS['id'];    
        }
    }
    ?>
    در مورد نوشتن تابع در MySQL، خودتون باید مطابق با نیاز و هدفتون بنویسید. ولی من یک مثال ساده میزنم:
    کد:
    شکل کلی تابع
    create function MyFunction(MyParameter)
    returns MyDataType
    return MyOperations
    اجرای کلی تابع
    select MyFunction(MyValue) as MyResult

    مثال
    create function Meter2Feet(Meter double)
    returns double
    return Meter * 0.3048006096
    اجرای مثال
    select Meter2Feet(12) as feet
    برای تعریف متغیر از دستور declare استفاده کنید. declare MyVariable MyDataType;
    برای مقدار دادن به متغیر هم از دستور set استفاده کنید. set MyVariable= MyValue;

    برای اطلاعات بیشتر MySQL manual رو مطالعه کنید Wink.
    __________________________________________________________________________
    وبلاگ: Yousha.Blog.ir

    صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
    http://gulfnews.com/opinion/thinkers/ira...i-1.500997
    (آخرین ویرایش در این ارسال: ۱۳۸۸ آبان ۲۲ ۰۱:۵۶ عصر، توسط Y.P.Y.)
    ۱۳۸۸ آبان ۲۲ ۰۱:۵۴ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : troy3
    troy3 آفلاین
    عضو جدید
    **

    ارسال‌ها: 10
    تاریخ عضویت: ۱۳۸۸ مهر ۱۴
    اعتبار: 0
    تشکرها : 12
    ( 3 تشکر در 2 ارسال )
    ارسال: #6
    RE: نیاز به یک کد ...
    (۱۳۸۸ آبان ۲۲ ۰۱:۴۹ عصر)admin نوشته شده توسط:  میشه با یه کوئری آورد
    کافیه فیلد weight رو sort کنین‌ بعد‌ ترتیب می افتن

    ممنون . اما در مورد limit چی کار کنم ؟؟؟ مثلا باید 100% تعداد داده های موجود با weight 10 انتخاب بشه و بعد 90% تعداد داده های با weight 9 و ...
    (۱۳۸۸ آبان ۲۲ ۰۱:۵۴ عصر)Y.P.Y نوشته شده توسط:  
    کد PHP:
    <?php
    for($adsi 10$adsi >= 1$adsi --)
    {
        
    $star->$adsimysql_num_rows(mysql_db_query(&$dbname"select 1 from milad_adverts where sid= 2 and typ= 3 and expire > '$now' and star= '$adsi$miladmedia;", &$RSconn)) or exit(mysql_error());
        
    $darsad->$adsi= ($adsi) / 10;
        
    $adslimit->$adsiceil($star->$adsi $darsad->$adsi);
        
    $limitation$adslimit->$adsi;
        
    $resultmysql_db_query(&$dbname"select id, title from mytable where weight= '$adsi' and active= 1 order by Rand() LIMIT 0, $limitation;", &$RSconn) or exit(mysql_error());
        
    $nummysql_num_rows(&$result);
        while(
    $RS mysql_fetch_array(&$result))
        {
            
    $radif ++;
            
    $title$RS['title'];
            
    $id$RS['id'];    
        }
    }
    ?>

    اینم که باز 10 تا کوئری باید اجرا بشه ...
    (آخرین ویرایش در این ارسال: ۱۳۸۸ آبان ۲۲ ۰۲:۲۷ عصر، توسط troy3.)
    ۱۳۸۸ آبان ۲۲ ۰۲:۲۶ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Y.P.Y آفلاین
    ناظم کل
    *******

    ارسال‌ها: 2,791
    تاریخ عضویت: ۱۳۸۷ دي ۲۸
    اعتبار: 105
    تشکرها : 2183
    ( 4874 تشکر در 2229 ارسال )
    ارسال: #7
    RE: نیاز به یک کد ...
    نقل قول: اینم که باز 10 تا کوئری باید اجرا بشه ...
    کدهای داخلش رو تغییر دادم.
    __________________________________________________________________________
    وبلاگ: Yousha.Blog.ir

    صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
    http://gulfnews.com/opinion/thinkers/ira...i-1.500997
    ۱۳۸۸ آبان ۲۲ ۰۳:۵۲ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : troy3
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS