|
|
|
| Всем привет, у меня вот такой вопрос.
Допустим, в таблице два поля. В первое заносятся значения кем-либо, а второе - образцовое, т. е. то с которым нужно будет сравнить значения первого.
Как это можно реализовать? Объясните плиз. Если что-то непонятно написал, спросите, уточню.
Да и еще как сделать, чтоб при обновлении поля столбца данные не просто заносились туда, а прибавлялись к содержимому ячейки. | |
|
|
|
|
|
|
|
для: [ANTI]CheateR
(11.08.2008 в 18:00)
| | >Всем привет, у меня вот такой вопрос.
>Допустим, в таблице два поля. В первое заносятся значения кем-либо, а второе - образцовое, т. е. то с которым нужно будет сравнить значения первого.
>Как это можно реализовать? Объясните плиз.
Если что-то непонятно написал, спросите, уточню.
Непонятно. Что за таблица, какова её структура (как называется таблица, её поля, какие типы они имеют) Какие значения требуется сравнить, и в какой форме получить результат.
Вообще же такая фраза (Если что-то непонятно написал, спросите, уточню.) допустима и актуальна в ответе на вопрос, а не в самом вопросе. Непонятый вопрос в большинстве случаев (считайте что Вам повезло) оставят без реакции.
>Да и еще как сделать, чтоб при обновлении поля столбца данные не просто заносились туда, а прибавлялись к содержимому ячейки.
UPDATE tbl
SET fld = fld + 20
|
| |
|
|
|
|
|
|
|
для: Trianon
(11.08.2008 в 18:28)
| | Trianon, :) спс, я тут новенький.
Ну в данном случае структура особо важной роли не играет. Мне бы принцип понять.
Создана форма, в ней 8 строк, по два инпута в каждой, человек вносит туда свои значения(цифры), они заносятся в бд(в бд имеются поля id, user, a1,a2,b1,b2 ....h1,h2). Это я сделал.
Вот теперь встал вопрос. Как мне эти значения сранвить с истинными?
Понять не могу как это сделать. Допустим, ввел я истинные значения и имя ITOGO.
Вот надо все строки сравнить с этой строкой. Причем за некоторые совпадения начислять юзеру в бд баллы.(алгоритм начисления уж не буду расписывать)
p.s.У тебя аська правильная в профиле ? Что-то я не могу тебя найти. Я б те там все норм объяснил. | |
|
|
|
|
|
|
|
для: [ANTI]CheateR
(11.08.2008 в 18:51)
| | Это снова я :)
Надеюсь теперь всё всем станет ясно.
Вот форма для записи значений в бд . (Че то я не догнал как рисунки вставлять)
Сама таблица:( прикрепил картинку)
там есть строка с именем эталон, остальные строки - строки с именами пользователей.
Вот надо сделать видимо цикл, чтоб он прошелся по всем строкам, сравнил значения этой строки с эталонной и в зависимости от угадывания результата начислил в поле points баллы.
P.S. Я новичок в этом деле. Если можно как-то проще сделать, объясните, пожалуйста. | |
|
|
|
|
|
|
|
для: [ANTI]CheateR
(12.08.2008 в 11:08)
| | где истинные значения?
И что нужно сделать в результате сравнения? | |
|
|
|
|
11.8 Кб |
|
|
для: Trianon
(12.08.2008 в 11:15)
| | Вот прикрепляю архив с двумя картинками | |
|
|
|
|
|
|
|
для: [ANTI]CheateR
(12.08.2008 в 11:15)
| | картинка красивая.
Понятнее не стало. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2008 в 11:19)
| | хаха
сравнить надо значения полей a1,a2 .... h1,h2 с аналогичными полями из строки с именем ETALON
в камменте повыше я ж расписал это
может в аське поговорим ? тут неудобно | |
|
|
|
|
|
|
|
для: [ANTI]CheateR
(12.08.2008 в 11:22)
| | 1. если ETALON - это не пользователь, а лишь строка с правильными ответами, то хранить её в этой же таблице - противоестественно. Но допустим даже что эти значения где-то вовне.
2. Что же все таки делать после сравнения?
Вот у пользователя admin совпали поля a1 e1 g1
К чему это должно приводить?
Или нужно всего лишь определить всех пользователей, у которых есть хотя бы по одному совпадению?
PS. Аська в моем профиле указана правильно. Нужно всего лишь уметь прочитать число. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2008 в 11:39)
| | 1. ETALON - эт не пользователь, это действительно строка с правильным ответом. Мне для этой строки отдельную таблицу создать ? просто туда я буду сам заносить правильные ответы, после окончания всех матчей. И изменить никто уже ничего не сможет.
2. OK, опишу сравнение, a1 и a2 - это, те значения, котоыре записывает человек по одному матчу, ну допустим спартак (тут поле инпут, сюда пишет 1) - (еще одно поле, сюда допустим 2) цска. (Я сделал два поля специально, думаю так будет проще сравнивать ).
Так вот теперь значения пользователя в таблице, матч закончился, я вношу правильный результат. К примеру, человек угадал и счет действительно 1-2. Если это так, то ему заносится в поле points = points +10.
Так теперь, рассмотрим ситуацию такую, человек не угадал счет, но угадал разницу мячей(2-3 например или 3-4, 0-1), то ему заносится 5 очков.
Ну вот там еще есть несколько пунктов, но думаю не надо их расписывать. (С этим алгоритмом занесения, думаю, сам справлюсь)
В таблице будет много строк с ответами пользователей. Вот как мне их значения достать из бд и сравнить с эталоном, только чтоб это все было автоматически, те при занесении мной правильных ответов и нажатия кнопки сабмит, начались бы подсчеты.
уфф, ну вот как-то так. Надеюсь, несильно надоел. | |
|
|
|
|
|
|
|
для: [ANTI]CheateR
(12.08.2008 в 12:46)
| | берем данные о истинном результате:
<? $sql = "SELECT * FROM tbl WHERE `name` = 'ETALON'";
$res = mysql_query(sql) or die "Error in $sql: ". mysql_error();
$etalon = mysql_fetch_assoc($res);
|
пробегаем все строки и обновляем очки.
<? $sql = "SELECT * FROM tbl";
$res = mysql_query(sql) or die "Error in $sql: ". mysql_error();
while($row = mysql_fetch_assoc($res))
{
$points = 0;
if($etalon['a1'] == $row['a1'] && $etalon['a2'] == $row['a2'])
$points += 10;
else if($etalon['a1']-$etalon['a2'] == $row['a1'] - $row['a2'])
$points += 5;
.....
if($points)
{
$sql = "UPDATE tbl SET points = $points WHERE id = ".$row['id'];
$upres = mysql_query(sql) or die "Error in $sql: ". mysql_error();
}
}
|
| |
|
|
|
|
|
|
|
для: Trianon
(12.08.2008 в 13:13)
| | Хотелось бы уточнить.
if($etalon['a1'] == $row['a1'] && $etalon['a2'] == $row['a2'])
$points += 10;
else if($etalon['a1']-$etalon['a2'] == $row['a1'] - $row['a2'])
$points += 5;
|
Это ведь у меня только по первому матчу обрабатывается.
Получается, что мне надо эти строки копирнуть 7 раз и везде поменять имена переменных.
Нет ли способа попроще ?
Может опять через цикл, только чтоб имена переменных менял ? | |
|
|
|
|
|
|
|
для: [ANTI]CheateR
(12.08.2008 в 15:26)
| | Нет, это мне хотелось бы уточнить.
А если матчей будет не семь, а три? А если не три, а пятнадцать?
А что будет с таблицей в следующем туре?
Способ попроще есть. Только для этого надо схему БД организовать по-человечески.
А с Вашей таблицей семь раз скопированный фрагмент, ей-богу, цена невеликая.
Это ж, блин, надо выдумать было - нумеровать данные матчей БУКВАМИ! | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2008 в 15:30)
| | А можно в двух словах описать как в данном случае по-человечески организовать бд ?
А насчет переменных, что в голову пришло первым, то и написал. Согласен, глуповато )) | |
|
|
|
|
|
|
|
для: [ANTI]CheateR
(12.08.2008 в 16:25)
| | >А можно в двух словах описать как в данном случае по-человечески организовать бд ?
Так я в двух и написал.
А подробности зависят от предметной области. От того, как туры проходят, какие команды участвуют, как ставки делают и прочее прочее прочее. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2008 в 17:08)
| | Здравствуйте, товарищ Trianon.
Я вам в аську писал, вы мне че то не ответили, решил сюда написать, а то процесс написания сайта встал, а это не есть хорошо.
Поменял я после вашего намёка имена матчей в таблице.
Я так понял, цифрами надо было делать чтоб потом в цикле инкремент ставить ?
Ну было у меня a1 a2, изменил я на 1, 9, 2, 10 ... 8, 16.
Запрос:
mysql_query("INSERT INTO tur1 (id, name, date, 1, 9,
2, 10, 3,11, 4,12, 5,13, 6,14, 7,15, 8,16)
VALUES (null, 'ETALON', '$date', '$a1','$a2',
'$b1','$b2','$c1','$c2','$d1','$d2','$e1','$e2','$f1','$f2'
,'$g1','$g2','$h1','$h2')")
or die(mysql_error());
|
Не записывает.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1, 9, 2, 10, 3,11, 4,12, 5,13, 6,14, 7,15, 8,16) VALUES (null, 'ETALON', '121872' at line 1
Ну всё вроде. Жду ответа )) | |
|
|
|
|
|
|
|
для: [ANTI]CheateR
(14.08.2008 в 19:05)
| | И снова здравствуйте.
Что-то я никак с циклом разобраться не могу. Подставил я вместо предложенного while цикл for(ну не хочу я чтоб в скрипте 8 раз повторялись одни и те же строки).
Не идет. Вот что у меня вышло:
$sql = "SELECT * FROM tur1 WHERE name='ETALON'";
$res = mysql_query($sql) or die("ERROR");
$etalon = mysql_fetch_assoc($res);
$sql2 = "SELECT * FROM tur1";
$res2 = mysql_query($sql2) or die("ERROR 2");
for($row = mysql_fetch_assoc($res2),$x=1;$x<=8;$x++)
{ $points = "0";
if($etalon['a$x']==$row['a$x'] && $etalon['b$x']==$row['b$x']) $points += 10;
else if ($etalon['a$x']-$etalon['a$x'] == $row['a$x'] - $row['a$x'] OR $etalon['a$x']-$etalon['a$x'] == $row['a$x'] - $row['a$x']) $points += 5;
else if($etalon['a$x']== $row['a$x'] OR $etalon['b$x']==$row['b$x']) $points+=1;
if($points) {mysql_query("UPDATE tur1 SET points = $points WHERE id=".$row[id]) or die(ERROR);}
}
;
|
Вообще голова не соображает уже, у меня заносит в поле etalon очки.
Подскажите, пожалуйста, что изменить. | |
|
|
|
|
|
|
|
для: [ANTI]CheateR
(15.08.2008 в 21:43)
| |
while($row = mysql_fetch_assoc($res))
{
$points = 0;
for($i = 1; $i <=7 ; ++$i)
if($etalon["a$i"] == $row["a$i"] && $etalon["b$i"] == $row["b$i"])
$points += 10;
else if($etalon["a$i"]-$etalon["b$i"] == $row["a$i"] - $row["b$i"])
$points += 5;
else if($etalon["a$i"] == $row["a$i"] || $etalon["b$i"] == $row["b$i"])
$points ++;
if($points)....
|
| |
|
|
|
|
|
|
|
для: Trianon
(15.08.2008 в 22:30)
| | В аську зайдите, пожалуйста. Я вам там много чего написал | |
|
|
|
|
|
|
|
для: [ANTI]CheateR
(18.08.2008 в 10:49)
| | Я там же и ответил. Поменьше, правда. | |
|
|
|
|