كمك در مورد كدنويسي خروجي mysql

mohsen162

Member
سلام خدمت دوستان :rose:
ميرم سر سوال من يك ديتابيس دارم كه هر ماه آپديت ميشه و اطلاعاتي براساس شهر و ماه در آن ذخيره ميشه وقتي ميخوام خروجي براساس ماهها بگيرم از حلقه for و آرايه ها استفاده كردم به اين صورت
PHP:
$res= array('re','ref','reo','rekh','ret','rem','resh','rema','reab','reaz','red','reb','ree');

for($i=1;$i<4;$i++){


$query= "select city, sum(jms) as `sum of jms`, sum(jzs) as `sum of jzs`, sum(mms) as `sum of mms`, sum(mzs) as `sum of mzs`, sum(jmr) as `sum of jmr`, sum(jzr) as `sum of jzr`, sum(mmr) as `sum of mmr`, sum(mzr) as `sum of mzr`, ses , ser, sum(mghms) as `sum of mghms`, sum(mghzs) as `sum of mghzs`, sum(mghmr) as `sum of mghmr`, sum(mghzr) as `sum of mghzr`, sum(nmo) as `sum of nmo` from `insertdatafot` where month='$i' group by `city` ORDER BY id ASC ";
$res[$i]=mysql_query($query);

}
اين حلقه سه ماهه متوالي رو در يك آرايه ذخيره مي كنه
PHP:
$res= array('re','ref','reo','rekh','ret','rem','resh','rema','reab','reaz','red','reb','ree');
حالا مي خوام از اين آرايه براي دستور
PHP:
   mysql_fetch_row
استفاده كنم يعني اين دستورم ببرم توي حلقه for
مشكل اينجاست كه خروجي دستور mysql_query يك آرايه است خروجي اين دستور هم mysql_fetch_row يك آرايه است در واقع آرايه داخل آرايه ميشه هر كاري ميكنم نميتونم از اين دستور خروجي بگيرم (آرايه انجمني و... هم كاربرد نداره) شما چي ژيشنهاد ميكنيد
 
آخرین ویرایش:

Domanjiri

Well-Known Member
سلام

لطفن یکم واضح تر توضیح بدین. یه فردی رو جلوی خودتون فرض کنید که از هیچ قسمت پروژتون خبر نداره، بعد سعی کنید بدون اینکه لازم باشه هیچ قسمت از پروژتون رو براش توضیح بدین، سوالتون رو بهش منتقل کنید. مثلن شما می تونستید بپرسی:« بهترین راه برای خوندن چند سطر از جدول، و دسترسی آسون به داده ها چیه؟» یا حالا هر چیز دیگه ای..

اگه منظورتون رو درست فهمیده باشم ( که بعید می دونم!!:green:):

از mysql_fetch_assoc استفاده کنید:
PHP:
while ($row = mysql_fetch_assoc($result)) {
    echo $row["city"];
    echo $row["sum of mghzs"];
   echo $row["sum of mghmr"];
  .....
..
}

موفق باشین
 

Domanjiri

Well-Known Member
درود بر شما

خب شما می تونید به انتهای همون کوئری بالایی، بعد از GROUP BY city، یه کولن بزارید و month رو هم اضافه کنید:

PHP:
...group by `city`,` month`...

بعدش هم یه mysql_fetch_assoc اجرا کنید و با print_r ببینید محتویات آرایه به چه صورت هست.

دیگه لازم نیست برای مجموع هم یک کوئری اجرا کنید، داخل کد PHP اعداد مربوط به تک تک ستون ها رو جمع کنید و در ستون مجموع نشون بدین.

چرا از فیلد date استفاده نکردین؟ روز و سال و ساعت و .. براتون مهم نیست؟ بعدن یکسال دیگه که دوباره قراره اعداد ماه ها تکرار بشه، اونوقت چی میشه؟!

موفق باشین
 

mohsen162

Member
سلام دوست عزيز
من از سال هم استفاده كردم الان ذهنم رو همين موضوع بدجوري گرفتار شده
حالا شما فكر كنيد كه من مي خوام جدول خروجيم به اين صورت باشه
PHP:
    echo "
<tr>
<th>
شهر
</th>
<th>
جمع
</th>
<th>
فروردين
</th>
<th>
ارديبهشت
</th>
<th>
خرداد
</th>
<th>
&nbsp;&nbsp;
</th>
<th>
درصد فروردين
</th>
<th>
درصد ارديبهشت
</th>
<th>
درصد خرداد
</th>
<th>
حالا چار كنم:shock:( درصدم از تقسيم هر ماه به جمع كل ماههاست اين خروجي هم براي يك موضوع خاص مثلا فروش موتورسيكلت)
دوست عزيز من اين كاري كه گفتين كردم اما همه رو توي يك ستون نشون ميده براي اينك مثل الگويي كه گفتم بشه چي كنم
 
آخرین ویرایش:

Domanjiri

Well-Known Member
سلام

این کد میتونه رهیافت(! از این کلمه خیلی خوشم میاد:green:) خوبی باشه برای شما:
PHP:
<?php

$conn = mysql_connect("localhost", "root", "");

if (!$conn) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}
  
if (!mysql_select_db("test")) {
    echo "Unable to select mydbname: " . mysql_error();
    exit;
}

$sql = "SELECT city, month, sum( mghzr ) AS sum
FROM insertdatafot
WHERE month
BETWEEN '3'
AND '7'
GROUP BY city, month ASC
LIMIT 0 , 30";

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

echo '<html><body><table border="1"><tr>';
$i = 1;
while ($row = mysql_fetch_assoc($result)) {
     echo '<td>';
     foreach($row as $key=>$value){
	echo $key.' => '.$value.'</br>';
	}
    $i++;
    echo ($i % 3 ==0 ) ? '</td></tr><tr>'  :  '</td>';
}

echo '</tr></table></body></html>';

mysql_free_result($result);
نک : غلط غلوط های املایی رو خدتون بگیرید دیگه!

پ.ن : راستی چرا ارسال قبلی خودتون رو حذف کردین؟! حتمن از دست من عصبانی شدین که چون نیومدم جوابتون رو بدم، شما هم اونو پاک ِش کردین! ها؟ :green: فکر می کنم( و فقط فکر می کنم!) یه قانون نانوشته(!) اینجا هست که چون حالا من ِ نوعی اومدم توی این تاپیک، بچه های دیگه اگه جواب سوال شما رو بلد هم باشند، ترجیح میدن چیزی ننویسند تا همون من ِ نوعی بیاد و بحث رو ادامه بده...

موفق باشین
 

mohsen162

Member
این کد میتونه رهیافت(! از این کلمه خیلی خوشم میاد:green:) خوبی باشه برای شما:
متاسفانه هیچ رهیافتی نشد
دوست عزیز من که با اون راهنمایی که شما کردین تا یک حدودی پیش رفته بودم اما انکار شما متوجه منظور من نشدید من می خوام در اون شکل table که گفتم خروجی بگیرم
با این دستور شما به تعداد هر ماه اونم به تعداد مواردی که در کوئری مورد ذکر شده تکرار میشه
خواهشا راهنمایی بفرمایید حتی کم

در مورد حذف سوالم دیدم شما راست میگید خوب ننوشته بودم اما منکر معرفت شما هم نیستم شما جز افراد مرد این انجمن هستید:rose:
 

Domanjiri

Well-Known Member
متاسفانه هیچ رهیافتی نشد
حالا ما یه بار اومدیم از کلمه ی محبوب ِمون استفاده کنیمااا ... :green:

بله، کدی که گذاشتم جواب نبود، ولی انصافن «رهیافت» رو دیگه بود!!

پیوست رو دانلود و استعمال کنید(!)

پ.ن: لطف دارین!

موفق باشین
 

پیوست ها

  • Rahyat ;).zip
    13 کیلوبایت · بازدیدها: 6

mohsen162

Member
آخ الهي خير جونيت ببيني مادر:green:
مردي به خدا الان ديدم ميرم روش كار كنم براي كار خودم تغييرش بدم
كاش ميشد يك جوري جبران كنم كاري هست براتون انجام بدم (البته علمم به اندازه مورچه اي در برابر شماست:rose: )
 

Domanjiri

Well-Known Member
زنده باد! :oops:

معمولن میگن، فلان چیز در برابر اون یکی چیز(!) مثل مورچه ای در برابر یه فیل ِ ( یا یه حیوون ِ دیگه!) حالا یه بار دیگه جمله ی خودتون رو بخونین:
البته علمم به اندازه مورچه اي در برابر شماست
:lol:

حالا از شوخی که بگذریم، به نظرم خوب نیست که با این جمله ها بخوایم از یه نفر تعریف کنیم، شما فکر کن من فردا یه سوال برام پیش بیاد، اونوقت این جمله ها عمرن (به جای عمراً!) نزارن که بیام اینجا سوالمو مطرح کنم، درست میگم؟ بگذریم....

البت شما نیت ِت خیر بوده، من می دونم:green:

امیدوارم همیشه شاد باشین:)
 

mohsen162

Member
البته ما کوتاهصحبت کردیم شما به بزرگواری خودت ببخش
اما یک سوال دیگه از تو کدها برام پیش اومده(دعوا نکنیا:lol:)
من اومدم بالای حلقه while یک <tr> درست کردم و با حلقه for و آرایه ها برای ستون ها تیتر گذاشتم
اما مشکل از آنجا شروع میشه که جمع کل و درصد ها( تقسیم هر ماه به کل) رو هر کاری میکنم درست نمیشه بعد از
PHP:
$row[ciye]
فرار میدم درست حساب نمیکنه بعد از : قرار میدم سه بار نشون میده خلاصه کلافم کرده میشه یک توضیح در مورد کدها بدین که چکار کنم (خلاصه دستم باز باشه که با این کدها بازی کنم هر چی خواستم انجام بدم:cry:)
بازم ممنون
 
آخرین ویرایش:

Domanjiri

Well-Known Member
درود بر شما

دوست ندارم برای عزیزانی که اینجا سوال می پرسند، کد بزارم، دلیلش هم فکر کنم واضحه! ما توی این بخش قراره که همدیگه رو راهنمایی کنیم، همین! ولی چه کنم که کلی خوابم میاد و کلی هم حس توضیح دادن نمیاد!!:shock:

شما لطف کنید و این قسمتی که تغییر دادم رو با دقت بخونید، شاید این موقع شب اشتباهی کرده باشم...(ظاهرن که درست کار می کنه!)
PHP:
echo '<table><tr>';
$i = 0;
$total = 0;
while ($row = mysql_fetch_assoc($result)) {

    echo ($i % ($end_month - $first_month + 1) == 0) ? '<td>' . $row['city'] .
        '</td><td>' : '<td>';

    echo $row['sum'];
    $myarr[$i] = $row['sum'];
    $total += $row['sum'];

    $i++;
    //echo ($i % ($end_month - $first_month + 1) == 0) ? '</td></tr><tr>' : '</td>';
    if ($i % ($end_month - $first_month + 1) == 0) {

        for ($j = 0; $j < $x = ($end_month - $first_month + 1); $j++) {
            echo '</td><td>' . number_format(($myarr[$j] * 100) / $total, 2) . '</td>';
        }
        echo '<td>' . $total . '</td></tr><tr>';

        $total = 0;
        $i = 0;

    } else {
        echo '</td>';
    }
}

echo '</tr></table></body></html>';

موفق باشین
 
آخرین ویرایش:

mohsen162

Member
سلام عزيز
چرا شما فكر ميكني كه من از شما سوءاستفاده ميكنم من شخصا ارادت به شما پيدا كردم چون مردي و بدونيد وقتي عاجز ميشم يعني واقعا بعضي وقتها ميشه كه 4 تا 5 ساعت با كد ور ميرم كه درست بشه اما علمم نميكشه مجبورم تو انجمن بيان كنم كه يك مرد و آقا مثل شما زحمت بكشه و راهنمايي كنه
واقعا شرمنده كردين بزرگواري كردين عزيز:rose:
بازم مزاحم ميشم:green:
 

mohsen162

Member
سلام دوستان عزیز
و با عرض تشکر دوباره از دوست عزیز( اگه اشتباه نکنم آقا مسعود:rose:)
من با این کدها مشکلاتم حل شد و تا اونجا که تونستم گسترشش دادم و هر خروجی که لازم داشتمو ازش گرفتم
حالا اگه دوستان اجازه بدن بحث ادامه بدم تا یک اسکریپ خیلی کاملی داشته باشیم
حالا اگر من بخوام مثلا فروش فروردین امسا ل با فروردین سال قبل یا کل فروش با فروش مشابه در سال قبل و یا هر سالی که بخوام مقایسه کنم چه باید کنم ( در همون جدول در یک ستون دیگه نشون بدام)
اگر من بیام توی کوئری شرط سال هم بزارم که بین مثلا 88 با 90 رو پیدا کنه سال 89 مشکل زاست باید چطوری کد بنویسم
راهنمایی کنید ممنون میشم
 
آخرین ویرایش:

Domanjiri

Well-Known Member
سلام

اگه اشتباه نکنم آقا مسعود
منظورتون منم؟! ( ولی من که اسمم مسعود نیست :'< ) یا مدیرمون، آقا مسعود؟

حالا اگر من بخوام مثلا فروش فروردین امسا ل با فروردین سال قبل یا کل فروش با فروش مشابه در سال قبل و یا هر سالی که بخوام مقایسه کنم چه باید کنم ( در همون جدول در یک ستون دیگه نشون بدام)
میشه با گسترش همون دستور sql قبلی به این اطلاعات هم رسید، ولی اونطوری گشت و گذار کردن توی آرایه ی بازگشتی خیلی زحمت داره.

راه بهتر اینه که یک کوئری برای امسال (که الان نوشتیم ِش!) و یک کوئری هم برای سال گذشته (یا سال قبل ترش، یا هر سال دیگه ای!) بنویسیم و بعد بطور موازی اونها رو پیمایش کنیم و اعداد ِشون رو باهم مقایسه کنیم و ....

موفق باشین
 
آخرین ویرایش:

mohsen162

Member
درسته من اومدم در بالای اون دستورات بعد از متصل شدن به دیتابیس یک کوئری دیگه ساختم و دقیقا همون کارهارو کردم یعنی
PHP:
>';
$i = 0;
$totalgh = 0;
while ($row = mysql_fetch_assoc($resultgh)) {
 
    $totalgh += $row['sum'];
    $i++;
        $total = 0;
        $i = 0;
    }
</SPAN></SPAN>
را بدست آوردم بعد در پایین این خروجی خروجی اصلی قرار دادم اما متاسفا تا میزارمش تو جدول به هم میریزه
( فرمول مقایسه با ماه مشابه سال قبل اینه سال جدید منهای سال قدیم تقسیم بر سال قدیم ضربدر 100) میگه تقسیم بر 0 میکنی در صورتی که مامخرج رو در قبل حساب کردیم
یا من بلد نیستم موازی عمل کنم یا نمیشه نکته داره که تداخل بین کوئری ها بوجود نیاد
 
آخرین ویرایش:

mohsen162

Member
مشكل تقسيم بر صفر رو حل كردم الان كدهاي من اعدادو درست نشون نميده اين كوئري اولم
PHP:
$first_month = 1;
$end_month = 3;
$frist_year=89;
$end_year=90;
?>
<?php
 
$sql = "SELECT city, sum(mghms) as `sum of mghms`, sum(mghzs) as `sum of mghzs`, sum(mghmr) as `sum of mghmr`, sum(mghzr) as `sum of mghzr`FROM insertdatafot WHERE year='$frist_year' and month BETWEEN '$first_month'AND '$end_month'GROUP BY city, month ASC";
$result = mysql_query($sql);
if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}
if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}
اين خوندن سال 89
PHP:
        $totalmghgh=0;
 
while ($row = mysql_fetch_assoc($result)) {
  $totalmghgh+= $row['sum of mghms']+$row['sum of mghzs']+$row['sum of mghmr']+$row['sum of mghzr'];
 
 
}
كوئري سال 90 مثل سال 89 هست
PHP:
while ($row = mysql_fetch_assoc($result)) {
    echo ($i % ($end_month - $first_month + 1) == 0) ? '<td>' . $row['city'] .
        '</td><td>' : '<td>';]
 $totalmgh += $row['sum of mghms']+$row['sum of mghzs']+$row['sum of mghmr']+$row['sum of mghzr'];
 
 
  
    $i++;
    //echo ($i % ($end_month - $first_month + 1) == 0) ? '</td></tr><tr>' : '</td>';
    if ($i % ($end_month - $first_month + 1) == 0) {
//چاپ درصد فوت
        for ($j = 0; $j < $x = ($end_month - $first_month + 1); $j++) {
            echo '</td><td>' .number_format(($myarr[$j] * 100) / $total, 2). '</td>';
        }
  
//دراين قسمت با سال گذشته مقايسه ميكنم
 
 $df=((($totalmgh-$totalmghgh)*100 )/($totalmghgh));
 $dfr= round($df,2);
 
  echo  '<td>' .$dfr. '</td>';
 
 
      // دوباره همه جمع هارو صفر ميكنيم
    $total = 0;
        $i = 0;
  $totalms=0;
  $totalzs=0;
  $totalmr=0;
  $totalzr=0;
  $totalmk=0;
  $totalzk=0;
  $totalse=0;
        $totalmgh=0;
  $totalnmo=0;
 
 
 
 
 
 
 
 
    } else {
        echo '</td>';
    }
من سعي كردم تا ميشه كدهاي اضاف حذف كنم تا حوصله دوستا خارج نشه به من بگيد مشكل كدها چي كه درست كار نميكنه
مگه اين نيست كه حلقه while تا وقتي شرط برقرار ادامه پيدا ميكنه اما چرا كار نميكنه
 
آخرین ویرایش:

Domanjiri

Well-Known Member
سلام

این متغییر ها دقیقن چه نقشی دارند؟ چرا جای دیگه ای از کد ازشون استفاده نشده؟ اصلن مگه مقداری گرفته بودند که شما "دوباره" صفرشون می کنید!؟
PHP:
$totalms=0;
  $totalzs=0;
  $totalmr=0;
  $totalzr=0;
  $totalmk=0;
  $totalzk=0;
  $totalse=0;
        $totalmgh=0;
  $totalnmo=0
اون تیکه کد وسطی نقش ِش چیه؟

این قسمت توی تیکه پایینی چه کاری انجام میده؟
PHP:
$totalmgh += $row['sum of mghms']+$row['sum of mghzs']+$row['sum of mghmr']+$row['sum of mghzr'];
دوست من، توی نام گذاری متغیر ها یه مقداری سلیقه به خرج بدی بد نیستاا!:)paint:). به خودتون مربوطه، ولی خب آدم قاطی می کنه :-?

اما چرا كار نميكنه؟
کد رو که کامل نذاشتین، حداقل بگو خروجی چی هست؟ ارور میده؟

موفق باشی
 

mohsen162

Member
سلام دوستان عزيز
گفتم كه تا اونجا كه تونستم كدهارو كوچيك كردم كه از حوصله دوستان خارج نشه ديگه بعضي چيزا از دستم در رفته خودت به بزرگواري خودتون ببخشيد:green:
اون تكه كد كه گفتين چي هست درواقعه همون مقدار 90 حساب ميكنه (مقدار فروش در سال 90) همين طور ايتمي هم در سال 89 در تكه كد بالايي (مقدار فروش در سال 89) رو حساب ميكنه
ببنيد وقتي تكه تكه چك ميكنم درسته يعني(خروجي سال 89) و خروجي سال 90 جدا جدا درسته ولي با هم مچ نميشه يعني وقتي در تكه كد آخر اجرا ميشه قاطي ميكنه يعني يك عددي رو ميزاره جاي سال 89 كه اصلا نميدونم از كجا مياره اصلا اينطور عددي وجود نداره با هم تداخل پيدا مي كنند
 
آخرین ویرایش:

Domanjiri

Well-Known Member
سلام

وقتی تیکه تیکه چک می کنید و درست عمل میکنه، شاید مشکل از تداخل اسم متغیر ها باشه، شما الان هم برای سال 90 و هم برای اون یکی سال از row$ استفاده کردین. مثلن بزارید this_year , $past_year$ . از کدی که نوشتین واسه خودتون هزارتو(!) درست نکنید... تا می تونید به زبون انسان نزدیک تر ِش کنید.

امیدوارم مشکل زودتر حل بشه....

پیروز باشی دوست من
 

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

بالا