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



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

#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

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Обработка PHP-кода - полученного из базы данных
  2. Вопрос по выводу данных из базы
  3. Форма Вывода Из Sql Не Делается Ссылкой
  4. Запрос на вывод категорий из базы данных
  5. Выводить из базы файлы в виде диалога

#2 ZiTosS

ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

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

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


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