SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.07.2015 14:11:41

xanter1984
Участник
Зарегистрирован: 02.07.2015
Сообщений: 4

Запрос MySQL

Добрый день. Существует сайт (мониторинг игровых серверов) в котором есть услуги которые можно приобрести для игрового сервера. Вот хочу сделать скрипт для отправки писем пользователям на ихн мыло за 3 дня до конца услуги. Все вроде понятно но возникли проблемы с запросом.

Таблица:  `lm_list`- здесь вся инфа сервера
(`id`- ид сервера, 
  `ip`- ip сервера,
  `q_port` - порт сервера,
   `end`,`end_month`,`end_line` - Услуги и сроки завершения).

Таблица:  `lm_users`  - здесь вся инфа пользователей
  (`id`- ид пользователя, 
   `name`- имя пользователя
   `email`- мыло пользователя).

Таблица:  `lm_myservers`   - здесь показана привязка сервера и пользователя
  (`uid`- ид пользователя, 
   `sid``- ид сервера ).


Рылся копался ковырялся и создал php страничку.
с запросом.

<?php
            if(mysql_connect("host", "dbname", "dbpassword"))
            {
                echo 'connection ok';
            }
            else
            {
                echo 'connection error';
            }
            if(mysql_select_db("dbname"))
            {
                echo 'select ok';
            }
            else
            {
                echo 'select error';
            }

            // за сколько дней до окончания услуги будем оповещать
            $days = 3;
            $t=time();
            $name = '';
            $q=mysql_query('
                SELECT
                    `id`,
                    `uid`
                    `ip`,
                    `q_port`,
                    `end`,
                    `end_month`,
                    `end_line`
                FROM
                    `lm_list`
                WHERE
                    (((`end`<\''
.($t+$days*60*60*24).'\') AND(`end`>\''.$t.'\')) AND (`golos`>\'9998\')) OR
                    (((`end_line`<\''
.($t+$days*60*60*24).'\') AND(`end_line`>\''.$t.'\')) AND (`line`=1)) OR
                    (((`end_month`<\''
.($t+$days*60*60*24).'\') AND(`end_month`>\''.$t.'\')) AND (`month`=1))
                '
);
                if(!$q)
                {
                    echo 'Query error 1';
                }
            while ($r = mysql_fetch_assoc($q))
            {
                $tvc = $t+$days*60*60*24;
                if (($r['end'] < $tvc) && ($r['end'] > $t))
                {
                    $name = 'VIP';
                }
                elseif (($r['end_line'] < $tvc) && ($r['end_line'] > $t))
                {
                    $name = 'Выделение цветом';
                }
                elseif (($r['end_month'] < $tvc) && ($r['end_month'] > $t))
                {
                    $name = 'TOP';
                }
                notify($r['uid'], $r['ip'], $r['q_port'], $name);
            }

       

            function notify($u, $ip, $p, $name) {
            // set mail info
            $title = 'Заканчивается срок действия услуги - '.$name.'.';
            $msg = 'Здравствуйте, %s. Оповещаем Вас о том, что у Вашего сервера %s заканчивается срок действия услуги - '.$name.'.';
           
            // get user info
            $q=mysql_query('SELECT `email`,`name` FROM `lm_users` WHERE `id`=\''.$u.'\'');
            $r=mysql_fetch_assoc($q);
           
            // send mail
            $headers= "MIME-Version: 1.0\r\n";
            $headers .= "From: Оповещение Мониторингr <no-reply@мониторинг>\r\n";
            return mail($r['email'], $title, sprintf($msg, $r['name'], "http://мониторинг/info/".$ip . ':' . $p, $ip . ':' . $p), $headers);
        }
   
?>


Но проблема в том что  `uid` - (ид пользователя  в таблице   `lm_list` нету. Добавив руками ее в таблицу и указав ид пользователя скрипт срабатывает и отправляет письма.

Но нужен запрос сделать так чтоб затронуть все таблицы чтоб скрипт срабатывал.

Отредактированно xanter1984 (02.07.2015 14:14:41)

Неактивен

 

#2 03.07.2015 23:38:09

xanter1984
Участник
Зарегистрирован: 02.07.2015
Сообщений: 4

Re: Запрос MySQL

что подсказать нету кому

Неактивен

 

#3 05.07.2015 13:38:37

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Запрос MySQL

Не вполне понятно, что Вы хотите. Давайте абстрагируемся от php и будем мыслить категориями исключительно sql для начала smile.

Приведите структуру и данные таблиц(ы) - и какую выборку из них Вы хотите получить.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#4 05.07.2015 17:15:17

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Запрос MySQL

Насколько я понял структуру, которая написана сверху, Вам нужно просто присоединить одну таблицу к другой:

SELECT ..., uid, ... FROM lm_list JOIN lm_myservers ON id = sid WHERE ...;

В ней uid — это идентификатор пользователя, который Вам нужен.

Неактивен

 

#5 06.07.2015 11:24:25

xanter1984
Участник
Зарегистрирован: 02.07.2015
Сообщений: 4

Re: Запрос MySQL

Таблица: `lm_list`
Услуги
id ....... ip .............. q_port .......... end ................ end_month ....... end_line
1 .... 127.0.0.1 ....... 27015 ....... ост. 5 дней ....... ост. 15 дней ....... ост. 2 дня
2 .... 127.0.0.2 ....... 27025 ....... ост. 3 дня .......... ост. 8 дней ....... ост. 9 дней
3 .... 127.0.0.3 ....... 27035 ....... ост. 6 дней ....... ост. 1 день ....... ост. 5 дней
4 .... 127.0.0.4 ....... 27037 ....... ост. 4 дня .......... ост. 1 день ....... ост. 2 дня
5 .... 127.0.0.5 ....... 27046 ....... ост. 16 дней ....... ост. 11 дней ....... ост. 3 дня


Таблица: `lm_users`

id name email
1 Amigo Amigo@mail.ru
2 Xanter Xanter@mail.ru
3 Bosota Bosota@mail.ru


Таблица: `lm_myservers`

uid sid
1 2,5
2 1
3 3,4

Где uid=id (`lm_users`)
а sid=id (`lm_list`)

То есть мы видим что Amigo(id-1) владелец сервера 127.0.0.2:27025 и 127.0.0.5:27046 (в `lm_list` id-2, id-5)
Мне нужно чтоб в одном запросе было понятно данные сервера добавил Amigo, и владельцу сервера отправляло письмо что у вашего сервера заканчивается услуга

Неактивен

 

#6 06.07.2015 11:27:01

xanter1984
Участник
Зарегистрирован: 02.07.2015
Сообщений: 4

Re: Запрос MySQL

`id`,
                    `ip`,
                    `q_port`,
                    `end`,
                    `end_month`,
                    `end_line`
                FROM
                    `lm_list`
                WHERE
                    (((`end`<\''.($t+$days*60*60*24).'\') AND(`end`>\''.$t.'\')) AND (`golos`>\'9998\')) OR
                    (((`end_line`<\''
.($t+$days*60*60*24).'\') AND(`end_line`>\''.$t.'\')) AND (`line`=1)) OR
                    (((`end_month`<\''
.($t+$days*60*60*24).'\') AND(`end_month`>\''.$t.'\')) AND (`month`=1))

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson