Проблемы sql для консультации оговорок

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

Мой script PHP консультации этот (также здесь):

=$iDateFrom)
    {
        array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry
        while ($iDateFrom<$iDateTo)
        {
            $iDateFrom+=86400; // add 24 hours
            array_push($aryRange,date('Y-m-d',$iDateFrom));
        }
    }
    return $aryRange;
}


    //Array de fechas presentes entre los rangos
    $array_rango_fechas = createDateRangeArray($fecha_inicio,$fecha_fin);
        //print_r($array_rango_fechas);

    //guardamos en una cadena de strings las fechas de dias reservados
    $fechas_a_reservar = implode(',' ,$array_rango_fechas );

    //print "Dias a reservar : ".$fechas_a_reservar."\n";


//------------------------------------------------


        //--Comprobar reservas--
        //reservas hechas entre los días elegidos - descartar de lista de barcos a mostrar


        $comprobar_reservas = mysqli_query($con," SELECT flotaid FROM disponibilidad WHERE DESDE >  $fecha_inicio 
            AND HASTA >  $fecha_fin" );
            //$comprobar_reservas_fin = mysql_query(" SELECT RESERVA FROM disponibilidad 
                //WHERE HASTA <= '2016-11-11'" );


            /*$comprobar_reservas = mysqli_query($con,"SELECT flotaid FROM reservas_prueba
                WHERE DESDE NOT IN ($fechas_a_reservar)

                union 

                SELECT flotaid FROM disponibilidad 
                WHERE HASTA IN ($fechas_a_reservar) ");*/

            $row = mysqli_fetch_array($comprobar_reservas );

            print_r($row);

            /*$comprobar_reservas = mysql_query("SELECT flotaid  FROM disponibilidad 
                WHERE DESDE IN  ('$fechas_a_reservar') AND HASTA IN ('$fechas_a_reservar')" );*/

        //print_r($comprobar_reservas);
        //-->las querys devuelven la reserva del barco de ID = 4,
        //asi que se listan los barcos que no tengan esa ID

        //$row = mysql_fetch_array($comprobar_reservas);


        $num_rows = mysqli_num_rows($comprobar_reservas);

    if($num_rows > 0){
        //ARRAY que guardará los IDs/Nombres de barcos ya reservados,
        //y de esta forma sabremos cuáles estan disponibles descartando
        $barcos_no_disponibles = array();




        $i = 0;

            while($row = mysqli_fetch_assoc($comprobar_reservas))
            {
               $lista_barcos_no_disponibles = $row;

            }


            $barcos_no_disponibles = implode(',' , $lista_barcos_no_disponibles );
            /*
            $barcos_no_disponibles_b = implode(',' ,$barcos_no_disponibles_b );
            $barcos_no_disponibles = $barcos_no_disponibles_a.$barcos_no_disponibles_b;*/

            //array_push();





        //print_r("Ids Barcos no disponibles : ".$barcos_no_disponibles."\n");


        //---COMPROBAR flota con ID (?)
            $comprobar_flota = mysqli_query($con,"SELECT * FROM flota WHERE FLOTAID NOT 
                IN ('$barcos_no_disponibles') ");

            $array_flota = array();
            $i = 0;


            while($row = mysqli_fetch_array($comprobar_flota)) {

                $array_flota[$i]['FLOTAID']         = $row['FLOTAID'];
                $array_flota[$i]['NOMBRE']          = utf8_encode($row['NOMBRE']);
                $array_flota[$i]['CARACTERISTICAS'] = utf8_encode($row['CARACTERISTICAS']);
                $array_flota[$i]['EQUIPAMIENTO']    = utf8_encode($row['EQUIPAMIENTO']);

                $i++;
            }

            //print_r($array_flota);


            header("Content-Type: application/json; charset=utf-8;");
            $json =  json_encode($array_flota,JSON_HEX_QUOT);
            if(empty($json)){
                die("no funciona");
            }else{
                echo json_encode($array_flota);
            }
            exit;

    }else{
        header("Content-Type: application/json");
        echo json_encode(array());
        exit;
    }   

?>

Шаги, чтобы резервировать:

  1. Клиент определяет даты, в которых хочет быть отдельное помещение у судна, используя поля input которых Вы являетесь расписанием.

  2. Информация приказывают посредством AJAX в script делать консультацию. Создается цепь с присутствующими датами внутри ранга между Датой начала и Дата цели оговорки.
    Ты резервируешь существующие, что обладали датами внутри этого ранга, они не появятся, другие да.

  3. Пользователь получает список доступных судов. Вы определяете Ваши данные и Вы посылаете оговорку в Веб.

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

0
задан 13.10.2016, 14:29
5 ответов
SELECT flotaid 
FROM disponibilidad 
WHERE ($fecha_inicio BETWEEN DESDE AND HASTA) AND ($fecha_fin BETWEEN DESDE AND HASTA)

В действительном query обе даты: дата начала и конца, так как то, что должно себе санкционировать данный интервал даты и не единственной даты.

3
ответ дан 24.11.2019, 13:07
  • 1
    Much и # 237; пропасти спасибо! Поскольку я обычно не использую between и s и # 237; я смог пытаться queries сходные в " WHERE X = И AND WHERE В = B" он не представлял, что он давал такой хороший результат: D я записываюсь это! – Víc M.R. 20.10.2016, 10:41

если то, что ты ищешь, состоит в том, чтобы знать наличие между рангом дат, то, что ты можешь тестировать, таким образом:

SELECT flotaid FROM disponibilidad WHERE DESDE > $fecha_inicio AND HASTA < $fecha_fin"

0
ответ дан 24.11.2019, 13:07

Принимая, что поля DESDE и HASTA имейте тип данных "восходите", для того, чтобы сравнение было сделано правильно, самая простая форма была бы:

SELECT flotaid FROM disponibilidad WHERE DESDE >= '$fecha_inicio' AND HASTA <= '$fecha_fin'
  • $fecha_inicio и $fecha_fin с форматом "aaaa-mm-dd";
0
ответ дан 24.11.2019, 13:07

только как добавочный комментарий

переменные даты в цепи query deberГ, - чтобы быть между кавычками

"SELECT flotaid FROM disponibilidad WHERE DESDE >  '$fecha_inicio' AND HASTA < '$fecha_fin'"
0
ответ дан 24.11.2019, 13:07

Большое спасибо всем из-за ваших ответов, но только я могу занести в список последний корабль результатов, а именно, если он возвращает мне IDs 1,2 и 3, только возврати номер 3. Чтобы видеть, что плохое.

0
ответ дан 24.11.2019, 13:07

Теги

Похожие вопросы