Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

DLE mysql

, Где ошибки?
Статус пользователя FreeDom
сообщение 17.2.2015, 21:22
Сообщение #1


Стаж: 15 лет

Сообщений: 959
Благодарностей: 67
Полезность: 129

Всем привет, помогите долбаюсь битый чай в чем проблема не могу понять, движек DLE
Нужно добавить запись если ее нету, а есть запись есть просто обновить количество news_read +1
$a = $db->query("SELECT COUNT(*) FROM `dle_stat` WHERE `user_id` = '{$row['autor']}'");
if($db->num_rows($a) == 0)
{
$db->query( "UPDATE dle_stat SET news_read=news_read+1 WHERE user_id='{$row['autor']}'" );
}
else
{
$db->query("INSERT INTO `dle_stat` (`id`, `user_id`, `date`, `news_read` ) VALUES (NULL, '{$row['autor']}', NOW(), '1');" );
}


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя MarVal
сообщение 17.2.2015, 22:13
Сообщение #2


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

$a = $db->query("SELECT COUNT(*) FROM `dle_stat` WHERE `user_id` = '{$row['autor']}'");
Проверка наличия через автора?
if($db->num_rows($a) == 0)
{
$db->query( "UPDATE dle_stat SET news_read=news_read+1 WHERE user_id='{$row['autor']}'" );
}
else
{
$db->query("INSERT INTO `dle_stat` (`id`, `user_id`, `date`, `news_read` ) VALUES (NULL, '{$row['autor']}', NOW(), '1');" );
}


"if($db->num_rows($a) == 0)" Скорее нужно == 1, то обновить, а то получается, если записи нет, то обновить.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя FreeDom
сообщение 17.2.2015, 22:22
Сообщение #3


Стаж: 15 лет

Сообщений: 959
Благодарностей: 67
Полезность: 129

Цитата(MarVal @ 17.2.2015, 22:13) *
$a = $db->query("SELECT COUNT(*) FROM `dle_stat` WHERE `user_id` = '{$row['autor']}'");
Проверка наличия через автора?
if($db->num_rows($a) == 0)
{
$db->query( "UPDATE dle_stat SET news_read=news_read+1 WHERE user_id='{$row['autor']}'" );
}
else
{
$db->query("INSERT INTO `dle_stat` (`id`, `user_id`, `date`, `news_read` ) VALUES (NULL, '{$row['autor']}', NOW(), '1');" );
}


"if($db->num_rows($a) == 0)" Скорее нужно == 1, то обновить, а то получается, если записи нет, то обновить.

Даже притаком раскладе не записывает в бд записи (
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarVal
сообщение 18.2.2015, 0:02
Сообщение #4


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

На данный момент таблица пустая? Если нет, то думаю, что записи уже больше 1, тем самым условие "==1" не сработает.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя FreeDom
сообщение 18.2.2015, 0:26
Сообщение #5


Стаж: 15 лет

Сообщений: 959
Благодарностей: 67
Полезность: 129

Цитата(MarVal @ 18.2.2015, 0:02) *
На данный момент таблица пустая? Если нет, то думаю, что записи уже больше 1, тем самым условие "==1" не сработает.

Таблица польностью пустая
Если использовать такую конструкцию не в DLE то все отлично добавляется и все окей но как только вносишь это в DLE все ужас не работает

Отредактировал: FreeDom, - 18.2.2015, 0:27
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarVal
сообщение 18.2.2015, 0:38
Сообщение #6


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

Не происходит сама запись?
$db->query("INSERT INTO `dle_stat` (`id`, `user_id`, `date`, `news_read` ) VALUES (NULL, '{$row['autor']}', NOW(), '1');" );
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя FreeDom
сообщение 18.2.2015, 2:51
Сообщение #7


Стаж: 15 лет

Сообщений: 959
Благодарностей: 67
Полезность: 129

Цитата(MarVal @ 18.2.2015, 0:38) *
Не происходит сама запись?
$db->query("INSERT INTO `dle_stat` (`id`, `user_id`, `date`, `news_read` ) VALUES (NULL, '{$row['autor']}', NOW(), '1');" );

Именно, обновление +1 проходит если запись есть в базе данных, если записи нет тогда ничего просто не происходит
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarVal
сообщение 18.2.2015, 7:04
Сообщение #8


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

Попробуйте вместо:
$db->query("INSERT INTO `dle_stat` (`id`, `user_id`, `date`, `news_read` ) VALUES (NULL, '{$row['autor']}', NOW(), '1');" );
Прописать это:
$db->query('INSERT INTO `dle_stat` SET `id`="NULL", `user_id`="'.$row['autor'].'", `date`="'.time().'", `news_read`="1"');
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarVal
сообщение 18.2.2015, 8:56
Сообщение #9


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

Ну в общих итогах:
Скрытый текст
$a = $db->query('SELECT id FROM `dle_stat` WHERE `user_id`="'.$row['autor'].'" LIMIT 1');
if($db->num_rows($a) == 1){
$db->query('UPDATE `dle_stat` SET news_read=news_read+1 WHERE user_id="'.$row['autor'].'" LIMIT 1');
}else{
$db->query('INSERT INTO `dle_stat` SET `user_id`="'.$row['autor'].'", `date`="'.time().'", `news_read`="1"');
}

Учитывая, что поле "id" - AUTO_INCREMENT
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 18.2.2015, 11:21
Сообщение #10
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

FreeDom,
структуру таблицы БД дайте.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя FreeDom
сообщение 18.2.2015, 11:59
Сообщение #11


Стаж: 15 лет

Сообщений: 959
Благодарностей: 67
Полезность: 129

Цитата(Orty_Hart @ 18.2.2015, 11:21) *
FreeDom,
структуру таблицы БД дайте.

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ETO_BYLO_LETOM
сообщение 18.2.2015, 12:03
Сообщение #12


Иконка группы

Стаж: 14 лет
Город: Краснодар

Сообщений: 3393
Благодарностей: 4387
Полезность: 805

Долго вы так гадать будете.
Сделай вывод mysql_error


😄
MasterServer.su прозрачнее чем твои окна дома
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя FreeDom
сообщение 18.2.2015, 12:14
Сообщение #13


Стаж: 15 лет

Сообщений: 959
Благодарностей: 67
Полезность: 129

Цитата(MarVal @ 18.2.2015, 8:56) *
Ну в общих итогах:
Скрытый текст
$a = $db->query('SELECT id FROM `dle_stat` WHERE `user_id`="'.$row['autor'].'" LIMIT 1');
if($db->num_rows($a) == 1){
$db->query('UPDATE `dle_stat` SET news_read=news_read+1 WHERE user_id="'.$row['autor'].'" LIMIT 1');
}else{
$db->query('INSERT INTO `dle_stat` SET `user_id`="'.$row['autor'].'", `date`="'.time().'", `news_read`="1"');
}

Учитывая, что поле "id" - AUTO_INCREMENT

Этот скрипт работает, спасибо )
теперь нужно сделать так чтоб он проверял именно за сегоднешний день
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarVal
сообщение 18.2.2015, 12:41
Сообщение #14


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

Цитата(FreeDom @ 18.2.2015, 13:14) *
Этот скрипт работает, спасибо )
теперь нужно сделать так чтоб он проверял именно за сегоднешний день


При проверке, что должно происходить? (Если запись добавилась/обновилась сегодня, то ...)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя FreeDom
сообщение 18.2.2015, 12:44
Сообщение #15


Стаж: 15 лет

Сообщений: 959
Благодарностей: 67
Полезность: 129

Цитата(MarVal @ 18.2.2015, 12:41) *
При проверке, что должно происходить? (Если запись добавилась/обновилась сегодня, то ...)

Все тоже самое, оно проверяет если есть запись за сегодня оно ее просто добавит и будет записывать туда дальше
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarVal
сообщение 18.2.2015, 12:48
Сообщение #16


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

Цитата(FreeDom @ 18.2.2015, 13:44) *
Все тоже самое, оно проверяет если есть запись за сегодня оно ее просто добавит и будет записывать туда дальше

Я не до конца понял, что необходимо, мне просто нужно очень доходчиво объяснить цель.
Проверка дня:
Скрытый текст
$check = $db->get_row($a);
if(date("d.m.Y", $check['date']) == date("d.m.Y", time()){
действие;
}else{
действие;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя FreeDom
сообщение 18.2.2015, 12:54
Сообщение #17


Стаж: 15 лет

Сообщений: 959
Благодарностей: 67
Полезность: 129

Цитата(MarVal @ 18.2.2015, 12:48) *
Я не до конца понял, что необходимо, мне просто нужно очень доходчиво объяснить цель.
Проверка дня:
Скрытый текст
$check = $db->get_row($a);
if(date("d.m.Y", $check['date']) == date("d.m.Y", time()){
действие;
}else{
действие;
}

Смотрите, есть задача выполнять действия вот этого кода
Код
$a = $db->query('SELECT id FROM `dle_stat` WHERE `user_id`="'.$row['autor'].'"  LIMIT 1');
if($db->num_rows($a) == 1){
$db->query('UPDATE `dle_stat` SET news_read=news_read+1 WHERE user_id="'.$row['autor'].'" LIMIT 1');
}else{
$db->query("INSERT INTO `dle_stat`  (`id`, `user_id`, `date`, `news_read` ) VALUES (NULL, '{$row['autor']}', NOW(), '1');" );
}

Нужно изменить немного условия, так что бы оно создавала таблицы по датам
Сегодня оно создала таблицу, с датой 2015-02-18, завтра оно не будет создавать таблицу с датой 2015-02-19 потому что нету проверки на дату, нужно сделать так чтоб оно еще и проверяло день
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя FreeDom
сообщение 18.2.2015, 13:02
Сообщение #18


Стаж: 15 лет

Сообщений: 959
Благодарностей: 67
Полезность: 129

Цитата(FreeDom @ 18.2.2015, 12:54) *
Смотрите, есть задача выполнять действия вот этого кода
Код
$a = $db->query('SELECT id FROM `dle_stat` WHERE `user_id`="'.$row['autor'].'"  LIMIT 1');
if($db->num_rows($a) == 1){
$db->query('UPDATE `dle_stat` SET news_read=news_read+1 WHERE user_id="'.$row['autor'].'" LIMIT 1');
}else{
$db->query("INSERT INTO `dle_stat`  (`id`, `user_id`, `date`, `news_read` ) VALUES (NULL, '{$row['autor']}', NOW(), '1');" );
}

Нужно изменить немного условия, так что бы оно создавала таблицы по датам
Сегодня оно создала таблицу, с датой 2015-02-18, завтра оно не будет создавать таблицу с датой 2015-02-19 потому что нету проверки на дату, нужно сделать так чтоб оно еще и проверяло день




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

Код
$a = $db->query('SELECT id FROM `dle_stat` WHERE `user_id`="'.$row['autor'].'" AND `date`="'.date('Y-m-d').'" LIMIT 1');
if($db->num_rows($a) == 1){
$db->query('UPDATE `dle_stat` SET news_read=news_read+1 WHERE user_id="'.$row['autor'].'" AND `date`="'.date('Y-m-d').'" LIMIT 1');
}else{
$db->query("INSERT INTO `dle_stat`  (`id`, `user_id`, `date`, `news_read` ) VALUES (NULL, '{$row['autor']}', NOW(), '1');" );
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarVal
сообщение 18.2.2015, 13:04
Сообщение #19


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

Цитата(FreeDom @ 18.2.2015, 13:54) *
Смотрите, есть задача выполнять действия вот этого кода
Код
$a = $db->query('SELECT id FROM `dle_stat` WHERE `user_id`="'.$row['autor'].'"  LIMIT 1');
if($db->num_rows($a) == 1){
$db->query('UPDATE `dle_stat` SET news_read=news_read+1 WHERE user_id="'.$row['autor'].'" LIMIT 1');
}else{
$db->query("INSERT INTO `dle_stat`  (`id`, `user_id`, `date`, `news_read` ) VALUES (NULL, '{$row['autor']}', NOW(), '1');" );
}

Нужно изменить немного условия, так что бы оно создавала таблицы по датам
Сегодня оно создала таблицу, с датой 2015-02-18, завтра оно не будет создавать таблицу с датой 2015-02-19 потому что нету проверки на дату, нужно сделать так чтоб оно еще и проверяло день


Думаю, должно помочь
Скрытый текст

$a = $db->query('SELECT id, date FROM `dle_stat` WHERE `user_id`="'.$row['autor'].'" ORDER BY ID DESC LIMIT 1'); // выполняем запрос и берем последнюю запись пользователя
if($db->num_rows($a) == "1"){ // если есть запись, то выполняем проверку по времени
$check = $db->get_row($a);
if(date("d.m.Y", $check['date']) == date("d.m.Y", time()){ // если день совпадает с нынешним, то выполняем обновление
$db->query('UPDATE `dle_stat` SET news_read=news_read+1 WHERE user_id="'.$row['autor'].'" LIMIT 1');
}else{ // иначе добавляем новую запись
$db->query('INSERT INTO `dle_stat` SET `user_id`="'.$row['autor'].'", `date`="'.time().'", `news_read`="1"');
}
}else{ // если ни одной записи нет, то создаем её
$db->query('INSERT INTO `dle_stat` SET `user_id`="'.$row['autor'].'", `date`="'.time().'", `news_read`="1"');
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarVal
сообщение 25.2.2015, 13:05
Сообщение #20


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

FreeDom, помогло вообще или не работает?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: