За последние 24 часа нас посетили 30564 программиста и 1796 роботов. Сейчас ищут 774 программиста ...

Последовательное обращение к БД

Тема в разделе "PHP и базы данных", создана пользователем Joker2705, 8 окт 2013.

  1. Joker2705

    Joker2705 Активный пользователь

    С нами с:
    8 окт 2013
    Сообщения:
    37
    Симпатии:
    0
    Здравствуйте, Я только начал изучать PHP программирование, и вот столкнулся с такой вот проблемой, мне нужно сделать последовательное обращение к таблицам БД при определенных условиях. Итак, имеется 4 таблицы: userquests(состоит из: usr, quest, status), user_kill (usr, quest, killing, ), quests(id, exp, money, monstrname), users(usr, money, exp,)
    пользователь $log
    имя монстра $mob[name]

    Сначала проверяется, есть ли в таблице "userquests" пользователь у которого status='start', если есть, то читаются значения quest и ищет это значение в таблице "quests", сравнивается значение в поле monstrname с именем убитого монстра ($mob[name]), если значения совпадают, то в таблице из значения поля killing отнимается 1, как только значение killing становится равным 0, то status='complete' и пользователю в таблицу "users" (money, exp)прибавляются значения прописанные в таблице "quests" (exp, money).
    Как это сделать??? Всю голову сломал уже никак не получается((((
     
  2. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    что за база данных .. postgresql..mysql ..
    query1=Select * from userquests where status='start'
    не не могу - не зная базы данных
    запросы написать ерунда если знать на чем писать
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    выбираем usr = ник, status='start'
    а то выберишь строки у которых будет старт
     
  4. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    дык ему походу и надо если старт появилось в статусе брать тот ник =)
     
  5. Joker2705

    Joker2705 Активный пользователь

    С нами с:
    8 окт 2013
    Сообщения:
    37
    Симпатии:
    0
    Примерно выглядеть это должно вроде как так

    $requ = mysql_query("SELECT * FROM `userquests` WHERE `usr` = '$log' and `status`='start'");
    if(empty($_GET[id])){
    While($q = mysql_fetch_array($requ))
    {
    $reqoq = mysql_query("SELECT * FROM `quests` WHERE `id` = '$q[quest]'");
    $quest = mysql_fetch_array($reqoq);
    if ($udata[monstname]=$mob[name]){mysql_query("UPDATE `user_kill` SET `killing`=`killing`-1 WHERE `usr`='$log'");}}

    $reqk = mysql_query("SELECT * FROM `user_kill` WHERE `usr`='$log'");
    $avtok=mysql_num_rows($reqk);
    if($reqk[killing]<=0){
    mysql_query("UPDATE `userquests` SET `status` = 'complete' WHERE `usr` = '$log'");
    }

    знаю что это не правильно. Подскажите, как сделать так, что бы работало))))
     
  6. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    ну во первых сразу вижу ошибку на стадии разработки : просто копирую не вникая в подробности ибо тестить все равно не на чем
    $requ = mysql_query("SELECT * FROM `userquests` WHERE `usr` = '$log' and `status`='start'") or die('Неверный запрос: ' . mysql_error());
    if(empty($_GET[id])){
    While($q = mysql_fetch_array($requ))
    {
    $reqoq = mysql_query("SELECT * FROM `quests` WHERE `id` = '$q[quest]'") or die('Неверный запрос: ' . mysql_error());;
    $quest = mysql_fetch_array($reqoq);
    if ($udata[monstname]=$mob[name]){mysql_query("UPDATE `user_kill` SET `killing`=`killing`-1 WHERE `usr`='$log'") or die('Неверный запрос: ' . mysql_error());}}

    $reqk = mysql_query("SELECT * FROM `user_kill` WHERE `usr`='$log'") or die('Неверный запрос: ' . mysql_error());
    $avtok=mysql_num_rows($reqk);
    if($reqk[killing]<=0){
    mysql_query("UPDATE `userquests` SET `status` = 'complete' WHERE `usr` = '$log'") or die('Неверный запрос: ' . mysql_error());
    }

    плюс когда какието сложные запросы с переменными идут я делаю примерно так
    $sql='Текст запроса '.$peremennaya;
    mysql_query ($sql) or die('Неверный запрос: '.sql." ОШИБКА :" . mysql_error())
     
  7. Joker2705

    Joker2705 Активный пользователь

    С нами с:
    8 окт 2013
    Сообщения:
    37
    Симпатии:
    0
    (((( Ничего не получается, все равно работает не так(((( Кто возьмется мне помочь??? Предоставлю вход по FPT, адрес сайта, данные на вход в базу данных)))
     
  8. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    ты лучше линку с die дай - не ужели ни 1 не сработал ? ты сделал как я сказал с переменными ?
     
  9. Joker2705

    Joker2705 Активный пользователь

    С нами с:
    8 окт 2013
    Сообщения:
    37
    Симпатии:
    0
    А где ее смотреть эту линку с die??

    Добавлено спустя 3 минуты 30 секунд:
    Неа, все скопировал, вообще страница не открывается, пустой лист отображается безничего и все(((

    Добавлено спустя 5 минут 9 секунд:
    Подскажите для начала вот здесь:
    mysql_query("UPDATE `user_kill` SET `killing`=`killing`-1 WHERE `usr`='$log'");
    $reqk = mysql_query("SELECT * FROM `user_kill` WHERE `usr`='$log'") or die('Неверный запрос: ' . mysql_error());
    $avtok=mysql_num_rows($reqk);
    if($reqk[killing]<=0){
    mysql_query("UPDATE `userquests` SET `status` = 'complete' WHERE `usr` = '$log'") or die('Неверный запрос: ' . mysql_error());
    }

    Работает, но не так ка нужно, killing отнимается нормально, но даже если он больше 0, все равно status меняется на comlete, как будто он пропускает условие и сразу переименовывает((((

    Добавлено спустя 2 минуты 20 секунд:
    может я условие неправильное ставлю??? if(может сюда что другое писать надо)?
     
  10. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а где команда получения в массив ?
    $q = mysql_fetch_array($reqk))

    чтобы его потом ифить ??
     
  11. Joker2705

    Joker2705 Активный пользователь

    С нами с:
    8 окт 2013
    Сообщения:
    37
    Симпатии:
    0
    Спасибо)))) Сделал почти все, вот скрипт:

    $requ = mysql_query("SELECT * FROM `userquests` WHERE `usr` = '$log' and `status`='start'");
    $avtou=mysql_num_rows($requ);
    $qq = mysql_fetch_array($requ);
    $reqqu = mysql_query("SELECT * FROM `quests` WHERE `id` = '$qq[quest]'");
    $avtoqu=mysql_num_rows($reqqu);
    $qu = mysql_fetch_array($reqqu);
    if ($qq[status]='start'){if ($qu[monstrname]=$mob[name]){mysql_query("UPDATE `user_kill` SET `killing`=`killing`-1 WHERE `usr`='$log' and `quest`='$qq[quest]'");
    $reqk = mysql_query("SELECT * FROM `user_kill` WHERE `usr`='$log' and `quest`='$qq[quest]'") or die('Неверный запрос: ' . mysql_error());
    $avtok=mysql_num_rows($reqk);
    $q = mysql_fetch_array($reqk);
    if($q[killing]<=0){
    mysql_query("UPDATE `userquests` SET `status` = 'complete' WHERE `usr` = '$log' and `quest`='$qq[quest]'") or die('Неверный запрос: ' . mysql_error());
    }}}

    работает почти все, только вот это не работает $qu[monstrname]=$mob[name], опять такое ощущение, что это пропускается, вообще не читается, пробрасывая этот кусок идет выполнение дальше. Мне нужно что бы только слова записанные в этих полях совпадают, только тогда идет выполнение дальше(( Подскажите, что не так?

    Добавлено спустя 1 минуту 51 секунду:
    Пробовал так же
    ....
    if ($qq[status]='start' and $qu[monstrname]=$mob[name]){.....

    результат тот же(((
     
  12. Joker2705

    Joker2705 Активный пользователь

    С нами с:
    8 окт 2013
    Сообщения:
    37
    Симпатии:
    0
    все, заработало, дело было в одном знаке, вместо $qu[monstrname]=$mob[name], нужно было написать $qu[monstrname]==$mob[name]. Странно, но зато понял и научился)) Спасибо всем, кто мне помогал, респект вам)))) Славику в первую очередь)))
     
  13. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    незачто =)