SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 14.04.2015 10:47:20

mob112
Участник
Зарегистрирован: 14.04.2015
Сообщений: 2

Запрос к БД

Есть база
http://f5.s.qip.ru/Dbzb2OUW.png

Таблица : doctors
http://f6.s.qip.ru/Dbzb2OUX.png

Таблица : option_hour
http://f6.s.qip.ru/Dbzb2OUY.png

Таблица : schedule
http://f6.s.qip.ru/Dbzb2OUZ.png


Подскажите, пожалуйста как к ней выполнить SQL-запрос? чтоб было

ФИО/кабинет/должность/ дата приема?

Спасибо!

Отредактированно mob112 (14.04.2015 10:49:09)

Неактивен

 

#2 14.04.2015 11:46:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Запрос к БД

А в таблицах это что за поля?
Приведите набор тестовых данных в десяток строк и желаемый результат на них.
Лучше в формате
create table ..
insert into..

Неактивен

 

#3 14.04.2015 11:59:32

mob112
Участник
Зарегистрирован: 14.04.2015
Сообщений: 2

Re: Запрос к БД

Файл index.php


require_once 'include/design.php'; // храним куски дизайна
require_once 'include/config.php';
write_header();
// создание массива дня недели и даты для вывода в шапке и запоминания для следующих вычислений
$names = array("Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб");
//для подписывания дней недели при выводе
$days_name = array();    $days_date = array();  // обнуляем массивы
$k = 0;
$iddata = 0;
while ($k < 7){
//выводим ближайшие 7 рабочих дней без учета выходных; выводим начиная с текущего (по возможности) дня.
    $iday = strtotime ('+'.$iddata.' day');
    if (!((date('w', $iday) == '0') OR  (date('w', $iday)== '6'))){
//если не воскресенье и не суббота  (выходные дни)
        $days_name[] = $names[date('w', $iday)];
//получаем краткое название дня недели из $names
        $days_date[] = date('d.m', $iday);
// запоминаем краткую дату дня недели (без года)
        $k++;
    }
    $iddata++;
}
 
echo '<h2>Запись на прием.</h2><hr />';    
echo '<p>Для того, чтобы записаться на прием, совершите ряд действий:</p>';
echo     '<ol>
    <li><p>Выберите врача, к которому Вы хотели бы попасть на прием, и посмотрите ближайщие доступные дни.</p></li>
    <li><p>Выберите время приема, и перейдите по ссылке к регистрационной анкете</p></li>
    <li><p>Правильно заполните поля анкеты и отправьте свои данные. В случае успешной записи вы увидите сообщение.</p></li>
</ol>'
;
echo     '<table class="pure-table-bordered pure-table">
    <thead>
    <tr><th>ФИО</th><th ROWSPAN="2">Каб.</th>'
;
for ($i = 0; $i<=6; $i++)
    echo         '<th>'.$days_name[$i].'</th>';
echo     '</tr><tr><th>должность</th>';
for ($i = 0; $i<=6; $i++)
    echo '<th>'.$days_date[$i].'</th>';
echo     '</tr></thead><tbody>';
 
$q = db_query('SELECT * FROM doctors');
$i = 1;
while ($row = mysql_fetch_array($q, MYSQL_ASSOC)) {
        write_rasp($row, $i);    
        ++$i;
    }
echo "</tbody></table>";
write_footer();

// печать новой строки в таблице-расписании
function write_rasp($row, $id)
{
    // сначала печатаем номер, ФИО, должность, кабинет
    echo '<tr>
    <td><strong>'
.$row['d_fio'].'</strong><br />'.$row['d_post'].'</td>
    <td>'
.$row['d_cabinet'].'</td>';
    // затем печатаем расписание, начиная с сегодня
    $k = 0;
    $iddata = 0;
    while ($k < 7){    
        $iday = strtotime ('+'.$iddata.' day');
        $iddata++;
        if ((date('w', $iday) == '0') OR  (date('w', $iday)== '6'))
            continue;
        $k++;
        $wday = date('Y-m-d', $iday);// переводим новую дату в читабельный вид
        $WDay = getdate($iday);    // разбиваем дату на составляющие для определения четности/нечетности дня
 
 
        // запоминаем нужное расписание в зависимости от четности дня для того,
        // чтобы на основе этих данных и запроса об исключении этого дня
        // вывести доступные часы
        if ($WDay['mday'] % 2 == 0) {
            $rasp_begin = $row['d_even_b'];
            $rasp_end = $row['d_even_e'];
        } else {
            $rasp_begin = $row['d_odd_b'];
            $rasp_end = $row['d_odd_e'];
        }
        $t_b_hour = get_hour($rasp_begin);
        $t_e_hour = get_hour($rasp_end);
 
        $q_hours = db_query('SELECT oh_hour, oh_id, oh_del FROM option_hour WHERE oh_del = false');
        $rasp = ''; // текст блока ссылок на расписание
        while ($hours = mysql_fetch_array($q_hours, MYSQL_BOTH))
        {
            // если попадает в диапозон графика работы
            $oh_hour = get_hour($hours['oh_hour']);
            $oh_min = get_minute($hours['oh_hour']);
 
            if (($oh_hour >= $t_b_hour) AND ($oh_hour < $t_e_hour))
            {
                $q_zapis = db_query("SELECT * FROM schedule WHERE sh_doc = {$row['d_id']} AND sh_day = '{$wday}' AND sh_oh = {$hours['oh_id']}");
                if (mysql_num_rows($q_zapis) == 0)
                    $rasp = $rasp."<a class='zap_a' href = 'register.php?doc={$row['d_id']}&day={$iddata}&hour={$hours['oh_id']}'>{$oh_hour}:{$oh_min}</a><br />";
                else
                    $rasp = $rasp.'Занято <br />';
            }            
        }
        // если не назначено расписание на этот день по причине отсутствия записи в этот день
        echo '<td>'.$rasp.'</td>';
    }
    echo '</tr>';
}
 


это php форма вызовы списка врачей, где выводится ФИО/кабинет/должность/ 

А это форма регистрации на прием к врачам


Файл register.php

session_start();
require_once 'include/design.php';
require_once 'include/config.php';
write_header();
 
$doc = str_clear($_GET["doc"]);
$day = str_clear($_GET["day"]);
$hour = str_clear($_GET["hour"]);
 
settype($hour, "int");
settype($doc, "int");
settype($day, "int");
 
$iday = strtotime ('+'.($day-1).' day');
$day = date('Y-m-d', $iday);
 
if (!isset($doc) OR !isset($day) OR !isset($hour)) {
        echo write_url_error('Ссылка больше не действительна. Обратитесь пожалуйста к администратору ');
        exit;
    }
 
    // проверка что такой записи еще нет, что она вообще возможна
    $q = db_query("SELECT * FROM schedule WHERE sh_doc = {$doc} AND sh_day = '{$day}' AND sh_oh = {$hour}");
    if (mysql_num_rows($q) > 0){
        echo write_url_error('На данное время уже есть запись. Попробуйте другое время.');
        exit;
    }
    // проверка что такая дата разрешена
    // запрос имени доктора, вывод этих данных на экран
    $q =db_query("SELECT * FROM doctors WHERE d_id = {$doc}");
    if (mysql_num_rows($q) == 0){
        echo write_url_error('Внутренняя ошибка, попробуйте еще раз.');
        exit;
    }    
    $row = mysql_fetch_array($q, MYSQL_ASSOC);
 
    $WDay = getdate(strtotime($day));                
// разбиваем дату на составляющие для определения четности/нечетности дня
// запоминаем нужное расписание в зависимости от четности дня для того,
// чтобы на основе этих данных и запроса об исключении этого дня
// вывести доступные часы
    if ($WDay['mday'] % 2 == 0) {
        $rasp_begin = $row['d_even_b'];
        $rasp_end = $row['d_even_e'];
    } else {
        $rasp_begin = $row['d_odd_b'];
        $rasp_end = $row['d_odd_e'];
    }    
 
    // конец блока проверки исключения на этот день
    $t_b_hour = get_hour($rasp_begin);
    $t_e_hour = get_hour($rasp_end);
 
    $q_hours = db_query("SELECT oh_hour, oh_id FROM option_hour WHERE oh_id = {$hour} AND oh_del = false");
    if (mysql_num_rows($q_hours) == 0){
        echo write_url_error('Внутренняя ошибка, попробуйте еще раз.'); exit;
    }
    $hours = mysql_fetch_array($q_hours, MYSQL_BOTH);
    $oh_hour = get_hour($hours['oh_hour']);
    $oh_min = get_minute($hours['oh_hour']);
 
    if (!(($oh_hour >= $t_b_hour) AND ($oh_hour < $t_e_hour))){
        echo write_url_error('На это время нельзя зарегестрироваться');        exit;        
    }    
 
// получаем данные формы, если форма была отправлена
if (!empty($_POST['sb'])){
        $a_fio = str_clear($_POST['fio']);
        $a_phone = str_clear($_POST['phone']);
        $a_email = str_clear($_POST['email']);
        $a_day = str_clear($_POST['day']);
        $a_mon = str_clear($_POST['mon'])+1;
        $a_year = str_clear($_POST['year']);
        $a_pseria = str_clear($_POST['pseria']);
        $a_pnumber = str_clear($_POST['pnumber']);
        $a_errors = '';
 
        // проверяем правильность заполнения полей
        if(empty($a_fio))
        $a_errors['fio'] = 'Это обязательное поле';
 
        if(empty($a_day) OR empty($a_mon) OR empty($a_year))
        $a_errors['birthday'] = 'Это обязательное поле';
 
        if (!(checkdate($a_mon, $a_day, $a_year)))
                $a_errors['birthday'] = 'Несуществующая дата';
                if (mktime(0, 0, 0, $a_mon, $a_day, $a_year) <= mktime(0, 0, 0, 1, 1, 1914)) {
                $a_errors['birthday'] = 'Некорректная дата';
                }
               if (mktime(0, 0, 0, $a_mon, $a_day, $a_year) >= strtotime("now")) {
                $a_errors['birthday'] = 'Некорректная дата';
                }    
        if(empty($a_phone))
        $a_errors['phone'] = 'Это обязательное поле';
        if(empty($a_pseria))  $a_errors['pseria'] = 'Это обязательное поле';
        elseif (!(is_numeric($a_pseria) AND (fmod($a_pseria, 1) == 0)))
            $a_errors['pseria'] = 'Поле должно содержать только цифры';        
        if(empty($a_pnumber))  $a_errors['pnumber'] = 'Это обязательное поле';        
        elseif (!(is_numeric($a_pnumber) AND (fmod($a_pnumber, 1) == 0)))
            $a_errors['pnumber'] = 'Поле должно содержать только цифры';
       
        if (!($a_email == '')){
            if(!strings_isemail($a_email))
            $a_errors['email'] = 'Неверно введен e-mail';
        }
        // если не было ошибок - добавляем в бд
        if(!$a_errors){
            // чистим данные
            mysql_query("INSERT INTO schedule (sh_doc, sh_day, sh_oh, sh_fio,sh_birthday, sh_phone, sh_email, sh_pseria, sh_pnumber) VALUES ( {$row['d_id']},'{$day}', {$hours['oh_id']},'{$a_fio}', '".date("Y-m-d", mktime(0, 0, 0, $a_mon, $a_day, $a_year))."','{$a_phone}','{$a_email}','{$a_pseria}','{$a_pnumber}')");        
            write_success($a_fio, $a_day, $a_mon, $a_year, $a_phone, $a_email, $a_pseria, $a_pnumber, $row, $oh_hour, $oh_min);
        }
        else
            write_form($a_fio, $a_day, $a_mon, $a_year, $a_phone, $a_email, $a_pseria, $a_pnumber, $a_errors);    
    }
    else
    {
        write_form($a_fio, $a_day, $a_mon, $a_year, $a_phone, $a_email, $a_pseria, $a_pnumber, $a_errors);
    }

 



Ну, если переходить по адресу register.php, то ничего не происходит, страница пустая получается.

пользователь увидит таблицу всех врачей по адрессу index.php, а так же ссылки, перейдя по которым он сможет записаться на прием. Ну что он увидел список врачей и их как-то нужно вести в бд, которую я создал ранее и которую видно на скринах, а вот как внести мне этих врачей в бд я не знаю, даже не знаю как верно выполнить запрос((( Может еще какие данные нужны?

Отредактированно mob112 (14.04.2015 12:00:45)

Неактивен

 

#4 14.04.2015 12:26:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Запрос к БД

так давайте отделять мух от котлет.
Что касается php, то лучше спрашивать на специализированном ресурсе, например, http://webew.ru/php/
навскидку могу отметить, что у вас не производится обработка ошибок при выполнении запросов к базе. Посмотрите эту статью

Что же касается исходного вопроса

как к ней выполнить SQL-запрос? чтоб было
ФИО/кабинет/должность/ дата приема?

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

Неактивен

 

Board footer

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