Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сравнение значений
 
 автор: [ANTI]CheateR   (11.08.2008 в 18:00)   письмо автору
 
 

Всем привет, у меня вот такой вопрос.
Допустим, в таблице два поля. В первое заносятся значения кем-либо, а второе - образцовое, т. е. то с которым нужно будет сравнить значения первого.
Как это можно реализовать? Объясните плиз. Если что-то непонятно написал, спросите, уточню.

Да и еще как сделать, чтоб при обновлении поля столбца данные не просто заносились туда, а прибавлялись к содержимому ячейки.

  Ответить  
 
 автор: Trianon   (11.08.2008 в 18:28)   письмо автору
 
   для: [ANTI]CheateR   (11.08.2008 в 18:00)
 

>Всем привет, у меня вот такой вопрос.
>Допустим, в таблице два поля. В первое заносятся значения кем-либо, а второе - образцовое, т. е. то с которым нужно будет сравнить значения первого.
>Как это можно реализовать? Объясните плиз.
Если что-то непонятно написал, спросите, уточню.

Непонятно. Что за таблица, какова её структура (как называется таблица, её поля, какие типы они имеют) Какие значения требуется сравнить, и в какой форме получить результат.

Вообще же такая фраза (Если что-то непонятно написал, спросите, уточню.) допустима и актуальна в ответе на вопрос, а не в самом вопросе. Непонятый вопрос в большинстве случаев (считайте что Вам повезло) оставят без реакции.


>Да и еще как сделать, чтоб при обновлении поля столбца данные не просто заносились туда, а прибавлялись к содержимому ячейки.
UPDATE tbl 
  SET fld = fld + 20

  Ответить  
 
 автор: [ANTI]CheateR   (11.08.2008 в 18:51)   письмо автору
 
   для: Trianon   (11.08.2008 в 18:28)
 

Trianon, :) спс, я тут новенький.

Ну в данном случае структура особо важной роли не играет. Мне бы принцип понять.
Создана форма, в ней 8 строк, по два инпута в каждой, человек вносит туда свои значения(цифры), они заносятся в бд(в бд имеются поля id, user, a1,a2,b1,b2 ....h1,h2). Это я сделал.
Вот теперь встал вопрос. Как мне эти значения сранвить с истинными?

Понять не могу как это сделать. Допустим, ввел я истинные значения и имя ITOGO.
Вот надо все строки сравнить с этой строкой. Причем за некоторые совпадения начислять юзеру в бд баллы.(алгоритм начисления уж не буду расписывать)

p.s.У тебя аська правильная в профиле ? Что-то я не могу тебя найти. Я б те там все норм объяснил.

  Ответить  
 
 автор: [ANTI]CheateR   (12.08.2008 в 11:08)   письмо автору
 
   для: [ANTI]CheateR   (11.08.2008 в 18:51)
 

Это снова я :)

Надеюсь теперь всё всем станет ясно.

Вот форма для записи значений в бд . (Че то я не догнал как рисунки вставлять)

Сама таблица:( прикрепил картинку)

там есть строка с именем эталон, остальные строки - строки с именами пользователей.

Вот надо сделать видимо цикл, чтоб он прошелся по всем строкам, сравнил значения этой строки с эталонной и в зависимости от угадывания результата начислил в поле points баллы.

P.S. Я новичок в этом деле. Если можно как-то проще сделать, объясните, пожалуйста.

  Ответить  
 
 автор: Trianon   (12.08.2008 в 11:15)   письмо автору
 
   для: [ANTI]CheateR   (12.08.2008 в 11:08)
 

где истинные значения?
И что нужно сделать в результате сравнения?

  Ответить  
 
 автор: [ANTI]CheateR   (12.08.2008 в 11:15)   письмо автору
11.8 Кб
 
   для: Trianon   (12.08.2008 в 11:15)
 

Вот прикрепляю архив с двумя картинками

  Ответить  
 
 автор: Trianon   (12.08.2008 в 11:19)   письмо автору
 
   для: [ANTI]CheateR   (12.08.2008 в 11:15)
 

картинка красивая.
Понятнее не стало.

  Ответить  
 
 автор: [ANTI]CheateR   (12.08.2008 в 11:22)   письмо автору
 
   для: Trianon   (12.08.2008 в 11:19)
 

хаха

сравнить надо значения полей a1,a2 .... h1,h2 с аналогичными полями из строки с именем ETALON

в камменте повыше я ж расписал это

может в аське поговорим ? тут неудобно

  Ответить  
 
 автор: Trianon   (12.08.2008 в 11:39)   письмо автору
 
   для: [ANTI]CheateR   (12.08.2008 в 11:22)
 

1. если ETALON - это не пользователь, а лишь строка с правильными ответами, то хранить её в этой же таблице - противоестественно. Но допустим даже что эти значения где-то вовне.

2. Что же все таки делать после сравнения?
Вот у пользователя admin совпали поля a1 e1 g1
К чему это должно приводить?
Или нужно всего лишь определить всех пользователей, у которых есть хотя бы по одному совпадению?

PS. Аська в моем профиле указана правильно. Нужно всего лишь уметь прочитать число.

  Ответить  
 
 автор: [ANTI]CheateR   (12.08.2008 в 12:46)   письмо автору
 
   для: 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 очков.

Ну вот там еще есть несколько пунктов, но думаю не надо их расписывать. (С этим алгоритмом занесения, думаю, сам справлюсь)

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

уфф, ну вот как-то так. Надеюсь, несильно надоел.

  Ответить  
 
 автор: Trianon   (12.08.2008 в 13:13)   письмо автору
 
   для: [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();
    }
}

  Ответить  
 
 автор: [ANTI]CheateR   (12.08.2008 в 15:26)   письмо автору
 
   для: 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 раз и везде поменять имена переменных.
Нет ли способа попроще ?

Может опять через цикл, только чтоб имена переменных менял ?

  Ответить  
 
 автор: Trianon   (12.08.2008 в 15:30)   письмо автору
 
   для: [ANTI]CheateR   (12.08.2008 в 15:26)
 

Нет, это мне хотелось бы уточнить.
А если матчей будет не семь, а три? А если не три, а пятнадцать?
А что будет с таблицей в следующем туре?

Способ попроще есть. Только для этого надо схему БД организовать по-человечески.

А с Вашей таблицей семь раз скопированный фрагмент, ей-богу, цена невеликая.

Это ж, блин, надо выдумать было - нумеровать данные матчей БУКВАМИ!

  Ответить  
 
 автор: [ANTI]CheateR   (12.08.2008 в 16:25)   письмо автору
 
   для: Trianon   (12.08.2008 в 15:30)
 

А можно в двух словах описать как в данном случае по-человечески организовать бд ?

А насчет переменных, что в голову пришло первым, то и написал. Согласен, глуповато ))

  Ответить  
 
 автор: Trianon   (12.08.2008 в 17:08)   письмо автору
 
   для: [ANTI]CheateR   (12.08.2008 в 16:25)
 

>А можно в двух словах описать как в данном случае по-человечески организовать бд ?

Так я в двух и написал.
А подробности зависят от предметной области. От того, как туры проходят, какие команды участвуют, как ставки делают и прочее прочее прочее.

  Ответить  
 
 автор: [ANTI]CheateR   (14.08.2008 в 19:05)   письмо автору
 
   для: 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   (15.08.2008 в 21:43)   письмо автору
 
   для: [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 очки.
Подскажите, пожалуйста, что изменить.

  Ответить  
 
 автор: Trianon   (15.08.2008 в 22:30)   письмо автору
 
   для: [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)....

  Ответить  
 
 автор: [ANTI]CheateR   (18.08.2008 в 10:49)   письмо автору
 
   для: Trianon   (15.08.2008 в 22:30)
 

В аську зайдите, пожалуйста. Я вам там много чего написал

  Ответить  
 
 автор: Trianon   (18.08.2008 в 12:13)   письмо автору
 
   для: [ANTI]CheateR   (18.08.2008 в 10:49)
 

Я там же и ответил. Поменьше, правда.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования