Обработка данных из mysql

Статус
Закрыто для дальнейших ответов.

Nordway

Active Member
Регистрация
06.08.2007
Сообщения
41
Здравствуйте. Нужна ваша помощь-))
Думаю, проще всего объяснить на таком примере как расчёт рейтинга каких-нибудь команд.

Для начала суть идеи:
есть запрос
Код:
SELECT номер FROM люди WHERE предмет=111 or предмет=222;
по этому запросу я нахожу людей у которых есть вещи 111 и 222. Получаю результат (еcли делать print ""): 5, 23, 78, 345, 654, 701 - ид обладателей.
Каждый из людей состоит в какой-то команде, поэтому делаю такой запрос
Код:
SELECT id_команды FROM команды WHERE участник=5 or участник=23 or участник=78 or guid=345 or guid=654 or guid=701;
по этому запросы определяю id_команды в которых состоят участники. Получаю результат (если делать print ""): 1, 11, 13, 1, 13, 13 - ид команд.
Т.е. получается всего три команды: 1, 11, 13
Теперь нужно распределить очки. Очки распределяю так: каждому учатнику по 5 очков ИЛИ даю по 5 очков каждой команде в списке - 1, 11, 13, 1, 13, 13 - т.е. команда 1 - получит 10 очков (т.к. с списке повторяется 2 раза), команда 11 - получит 5 очков (повторяется 1 раз), команда 13 - получит 15 очков (повторяется 3 раза).

и вот тут у меня проблема, как мне определить сколько раз повторяется в массиве id_команды чтобы это кол-во раз умножить на 5 и получить правильные очки. Ниже уже реальный пример как делал

Код:
$предмет= mysql_query("SELECT номер_человека FROM люди WHERE предмет=111 or предмет=222");
while ($предмет_А = mysql_fetch_array($предмет))
{
		$команда = mysql_query("SELECT номер_команды FROM команда WHERE номер_человека=".$предмет_А['номер_человека']."");
		while ($команда_А = mysql_fetch_array($команда))
		{
				$очки = mysql_query("SELECT очки_команды FROM рейтинг_команд WHERE номер_команды = ".$команда_А['номер_команды']."");
				while ($очки_А = mysql_fetch_row($очки))
				{
						$рейтинг = 0;
						$рейтинг = $очки_А['очки_команды']+5;
						mysql_query("UPDATE рейтинг_команд SET очки = ".$рейтинг." WHERE номер_команды = ".$команда_А['номер_команды']."");
				}
		}
}
но тут считается только +5 очков командам 1, 11, 13 без умножения...

Вообщем основная проблема в определении кол-ва повтров в списке и умножение этого кол-во на 5 и вынос куда-нить))

Заранее спасибо)
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Код:
//задаем массив групп
$massiv = (11, 13, 1, 13, 13);

//считаем количество повторений
$massiv2 = array_count_values($array);

// возвращает $massiv2 = array(11=>1, 13=>3, 1=>1)



$предмет= mysql_query("SELECT номер_человека FROM люди WHERE предмет=111 or предмет=222");
while ($предмет_А = mysql_fetch_array($предмет))
{
		$команда = mysql_query("SELECT номер_команды FROM команда WHERE номер_человека = {$предмет_А['номер_человека']}");
		while ($команда_А = mysql_fetch_array($команда))
		{
				$очки = mysql_query("SELECT очки_команды FROM рейтинг_команд WHERE номер_команды = ".$команда_А['номер_команды']."");
				while ($очки_А = mysql_fetch_array($очки))
				{
						$рейтинг = 0;
						foreach($key as $value)
						 {
							while($key == $команда_А['номер_команды'])
							{
							 $рейтинг = $очки_А['очки_команды']+5*$value;
							 break;
							}
						 }

						mysql_query("UPDATE рейтинг_команд SET очки = ".$рейтинг." WHERE номер_команды = ".$команда_А['номер_команды']."");
				}
		}
}
Типа такого...
 

Nordway

Active Member
Регистрация
06.08.2007
Сообщения
41
Код:
//задаем массив групп
$massiv = (11, 13, 1, 13, 13);

//считаем количество повторений
$massiv2 = array_count_values($array);

// возвращает $massiv2 = array(11=>1, 13=>3, 1=>1)
вот тут я заранее этих цифр незнаю, это всё определяет скрипт и никому не показывает)))

попробовал без него, тобишь вставил только foreach.
Выскакивает ошибка:
Warning: Invalid argument supplied for foreach() in C:\***\index.php on line 82
строка 82 - foreach($key as $value)
типо неопределены $key & $value =\\
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Попробуй распечатать massiv2

А также прикрепи код, который определяет массив, хоть посмотреть, как он выглядит!
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Для начала подучите мускул, Посмотрите left join. Потом посотрите на команду IN () она выполняется во много раз быстрее чем OR, я думаю все это можно сделать одним запросом в базу, не так злостно.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ