Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Вывод информации из базы данных

#1 BaCo

BaCo
  • Пользователь
  • 103 сообщений
  • Репутация: 0
0

Отправлено 28 Март 2010 - 10:03

Здравствуйте! Я вывожу статистику сайта так:
<table border="0" width="400">
	<tr>
		<td height="20" width="100" bgcolor="#00FFFF"><b>Дата</b></td>
		<td height="20" width="70" bgcolor="#00FFFF"><b>Показы</b></td>
		<td height="20" width="70" bgcolor="#00FFFF"><b>Клики</b></td>
		<td height="20" width="50" bgcolor="#00FFFF"><b>CTR</b></td>
		<td height="20" width="110" bgcolor="#00FFFF"><b>Деньги, <? echo($Currency); ?></b></td>
	</tr>
	<tr>
		<td height="20" width="100" bgcolor="#FFFFFF">Сегодня</td>
		<td height="20" width="70" bgcolor="#FFFFFF"><? $num1 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".$Today."', `type` = '0';")); if($num == "") { echo("0"); } else { echo($num); } ?></td>
		<td height="20" width="70" bgcolor="#FFFFFF"><? $num2 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".$Today."', `type` = '1';")); if($num == "") { echo("0"); } else { echo($num); } ?></td>
		<td height="20" width="50" bgcolor="#FFFFFF"><? $ctr = $num1/$num2; echo(round($ctr*100)/100); ?></td>
		<td height="20" width="110" bgcolor="#FFFFFF"><? echo($max0); ?></td>
	</tr>
	<tr>
		<td height="20" width="100" bgcolor="#FFFFFF"><? echo(($Day-1).".".$Month.".".$Year); ?></td>
		<td height="20" width="70" bgcolor="#FFFFFF"><? $num1 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-1).".".$Month.".".$Year."', `type` = '0';")); if($num == "") { echo("0"); } else { echo($num); } ?></td>
		<td height="20" width="70" bgcolor="#FFFFFF"><? $num2 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-1).".".$Month.".".$Year."', `type` = '1';")); if($num == "") { echo("0"); } else { echo($num); } ?></td>
		<td height="20" width="50" bgcolor="#FFFFFF"><? $ctr = $num1/$num2; echo(round($ctr*100)/100); ?></td>
		<td height="20" width="110" bgcolor="#FFFFFF"><? echo($max1); ?></td>
	</tr>
	<tr>
		<td height="20" width="100" bgcolor="#FFFFFF"><? echo(($Day-2).".".$Month.".".$Year); ?></td>
		<td height="20" width="70" bgcolor="#FFFFFF"><? $num1 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-2).".".$Month.".".$Year."', `type` = '0';")); if($num == "") { echo("0"); } else { echo($num); } ?></td>
		<td height="20" width="70" bgcolor="#FFFFFF"><? $num2 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-2).".".$Month.".".$Year."', `type` = '1';")); if($num == "") { echo("0"); } else { echo($num); } ?></td>
		<td height="20" width="50" bgcolor="#FFFFFF"><? $ctr = $num1/$num2; echo(round($ctr*100)/100); ?></td>
		<td height="20" width="110" bgcolor="#FFFFFF"><? echo($max2); ?></td>
	</tr>
	<tr>
		<td height="20" width="100" bgcolor="#FFFFFF"><? echo(($Day-3).".".$Month.".".$Year); ?></td>
		<td height="20" width="70" bgcolor="#FFFFFF"><? $num1 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-3).".".$Month.".".$Year."', `type` = '0';")); if($num == "") { echo("0"); } else { echo($num); } ?></td>
		<td height="20" width="70" bgcolor="#FFFFFF"><? $num2 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-3).".".$Month.".".$Year."', `type` = '1';")); if($num == "") { echo("0"); } else { echo($num); } ?></td>
		<td height="20" width="50" bgcolor="#FFFFFF"><? $ctr = $num1/$num2; echo(round($ctr*100)/100); ?></td>
		<td height="20" width="110" bgcolor="#FFFFFF"><? echo($max3); ?></td>
	</tr>
	<tr>
		<td height="20" width="100" bgcolor="#FFFFFF"><? echo(($Day-4).".".$Month.".".$Year); ?></td>
		<td height="20" width="70" bgcolor="#FFFFFF"><? $num1 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-4).".".$Month.".".$Year."', `type` = '0';")); if($num == "") { echo("0"); } else { echo($num); } ?></td>
		<td height="20" width="70" bgcolor="#FFFFFF"><? $num2 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-4).".".$Month.".".$Year."', `type` = '1';")); if($num == "") { echo("0"); } else { echo($num); } ?></td>
		<td height="20" width="50" bgcolor="#FFFFFF"><? $ctr = $num1/$num2; echo(round($ctr*100)/100); ?></td>
		<td height="20" width="110" bgcolor="#FFFFFF"><? echo($max4); ?></td>
	</tr>
	<tr>
		<td height="20" width="100" bgcolor="#FFFFFF"><b>Всего</b></td>
		<td height="20" width="70" bgcolor="#FFFFFF"><b><? $num1 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `type` = '0';")); if($num == "") { echo("0"); } else { echo($num); } ?></b></td>
		<td height="20" width="70" bgcolor="#FFFFFF"><b><? $num2 = @mysql_num_rows(@mysql_query("SELECT `id` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `type` = '1';")); if($num == "") { echo("0"); } else { echo($num); } ?></b></td>
		<td height="20" width="50" bgcolor="#FFFFFF"><b><? $ctr = $num1/$num2; echo(round($ctr*100)/100); ?></b></td>
		<td height="20" width="110" bgcolor="#FFFFFF"><b><? echo($max5); ?></b></td>
	</tr>
</table>
Но у каждой строки в базе (со статистикой) должна быть своя цена (т.е. когда рекламодатели заказывают рекламу, они указывают цену). Нужно сложить все значения с ценами и вывести результаты.
Я думаю сделать так:
while($row = @mysql_fetch_array(@mysql_query("SELECT `cost` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".$Today."', `type` = '1';"))) {
$max0 = $max0 + $row['cost'];
} while($row = @mysql_fetch_array(@mysql_query("SELECT `cost` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-1).".".$Month.".".$Year."', `type` = '1';"))) {
$max1 = $max1 + $row['cost'];
} while($row = @mysql_fetch_array(@mysql_query("SELECT `cost` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-2).".".$Month.".".$Year."', `type` = '1';"))) {
$max2 = $max2 + $row['cost'];
} while($row = @mysql_fetch_array(@mysql_query("SELECT `cost` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-3).".".$Month.".".$Year."', `type` = '1';"))) {
$max3 = $max3 + $row['cost'];
} while($row = @mysql_fetch_array(@mysql_query("SELECT `cost` FROM `".$DB_Prefix."stats` WHERE `site` = '".$site."', `user` = '".GetUserID()."', `date` = '".($Day-4).".".$Month.".".$Year."', `type` = '1';"))) {
$max4 = $max4 + $row['cost'];
}
}

Но мне кажется, что это будет очень сильно грузить базу данных. Можете помочь? Или предложить другой способ вывода статистики.

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 28 Март 2010 - 11:08

BaCo, покажите скрин с частью данных в БД, к примеру через phpMyAdmin. А то не очень понятно как вы суммируете и почему.
Вообще в MySQL есть такая функция SUM(), она как раз вам подойдет. То что вы написали будет грузить базу безумно, особенно если обращений к данной странице будет много.
Всё можно сделать за один запрос.
Объясните структуру точнее(лучше скрином и подписями). Что нужно проссумировать и с какими условиями и оговорками, а мы вам поможем решить данный вопрос. Пока очень сложно вникнуть.
  • 0


Оформление форума – IPBSkins.ru