Pobieranie danych z bazy utworzonych w danym przedziale czasu

0

Przeniosłem pytanie z działu MySQL. Mam następujący problem: poniższy kod powinien pobierać tylko te dane z bazy , które zostały wprowadzone w podanym przedziale czasu ( od dnia, do dnia). Niestety kod pobiera wszystkie dane, nie uwzględniając podanego przedziału czasu.

<?php
$data_OD_1 = $_POST['data_od'];                          // przesłanie dat z formularza
$data_DO_1 = $_POST['data_do'];                          // przesłanie dat z formularza

$data_OD = $data_OD_1.' '.'00:00:00';                    // dodanie do dat godzin, minut, sekund - strona pobiera   dane wpisane od godziny 00:00 danego dnia
$data_DO = $data_DO_1.' '.'23:59:59';                    // dodanie do dat godzin, minut, sekund - strona pobiera   dane wpisane do godziny 23:59 danego dnia

// Próba przeformatowania stringa  do wymaganego formatu SQL - datatime
// funkcje były stosowane po kolei. Nie równocześnie.

$mysqldatetime_OD = date("Y-m-d H:i:s", $data_OD);
$mysqldatetime_DO = date("Y-m-d H:i:s", $data_DO);

$mysqldatetime_OD = strtotime("Y-m-d H:i:s", $data_OD);
$mysqldatetime_DO = strtotime("Y-m-d H:i:s", $data_DO);

$mysqldatetime_OD = STR_TO_DATE($data_OD, '%Y-%m-%d %H:%i%s');
$mysqldatetime_DO = STR_TO_DATE($data_OD, '%Y-%m-%d %H:%i%s');


$sql = "SELECT  czesci.producent_maszyny,  czesci.model_maszyny,  czesci.nr_seryjny_czesci,
                czesci.ilosc,  czesci.id_pytajacego,  czesci.data_dodania_zapytania, 
                pytajacy.imie, pytajacy.e_mail
        FROM czesci
        JOIN pytajacy ON czesci.id_pytajacego = pytajacy.id_pytajacego
        WHERE czesci.data_dodania_zapytania >= :data_od AND czesci.data_dodania_zapytania <= :data_do
        ORDER BY id_czesci DESC ;";         

$instrukcja = $pdo->prepare($sql);                                
$instrukcja->bindValue('data_od', $mysqldatetime_OD, PDO::PARAM_STR); 
$instrukcja->bindValue('data_do', $mysqldatetime_DO, PDO::PARAM_STR); 
$instrukcja->execute(); 
$czesci = $instrukcja->fetchAll();
?>

Próbowałem przeformatowania stringa do wymaganego formatu SQL - datatime, ale wyskakują błędy. Czy ktoś mógłby podpowiedzieć jak dobrać się do tego problemu.

0

W jakim formacie masz kolumny z tym czasem dodania?
Z POST przychodzą Ci właściwe dane, we właściwym formacie?
To zapytanie w ogóle działała? Jak wstawisz tam dane i wykonasz spoza skryptu, bo np to id_czesci w klauzuli order by jest dziwne, masz taką kolumnę?

0
  • Kolumna z czasem jest w formacie datetime.
  • Z Post przychodzi string.
  • Zapytanie działa. Otrzymuję tabelkę z danymi o które pytam ale są to dane z całego zakresu czasu w jakim tworzona była baza. Tak jakby zmienne z datami (od, do) były pomijane w zapytaniu.
  • id_czesci jest to po prostu liczba porządkowa tabeli czesci. Autoincrement.
1

Zapytanie działa. Otrzymuję tabelkę z danymi o które pytam ale są to dane z całego zakresu czasu w jakim tworzona była baza. Tak jakby zmienne z datami (od, do) były pomijane w zapytaniu.

Ale jak poza skryptem napiszesz to zapytanie i wrzucisz tam jakieś losowe dane od-do, ale wszystko pisane z palca to wtedy filtr działa?
Chodzi o porównanie i wyłapanie różnic skrypt - działające rozwiązanie.

Edit. Teraz zauważyłem, że w poprawionym kilka razy kodzie mieszasz od i do przy konwersji.

$mysqldatetime_OD = STR_TO_DATE($data_OD, '%Y-%m-%d %H:%i%s');
$mysqldatetime_DO = STR_TO_DATE($data_OD, '%Y-%m-%d %H:%i%s');

masz tą samą datę dwa to nie zadziała bo powino być coś takiego
DATE_FORMAT(STR_TO_DATE....

0

Nie, to literówka. W prawdziwym kodzie jest ok. Poza tym funkcja STR_TO_DATE jet chyba funkcją MySQL.

0

Teraz kod wygląda tak

<?php

$data_OD_1 = $_POST['data_od'];                          // przesłanie dat z formularza
$data_DO_1 = $_POST['data_do'];                          // przesłanie dat z formularza

$mysqldatetime_OD = ($data_OD_1.' '.'00:00:00');                    // dodanie do dat godzin, minut, sekund - strona pobiera dane wpisane od godziny 00:00 danego dnia
$mysqldatetime_DO = ($data_DO_1.' '.'23:59:59');                    // dodanie do dat godzin, minut, sekund - strona pobiera dane wpisane do godziny 23:59 danego dnia


$sql = "SELECT  czesci.producent_maszyny,  czesci.model_maszyny,  czesci.nr_seryjny_czesci,
                czesci.ilosc,  czesci.id_pytajacego,  czesci.data_dodania_zapytania, 
                pytajacy.imie, pytajacy.e_mail
        FROM czesci
        JOIN pytajacy ON czesci.id_pytajacego = pytajacy.id_pytajacego
        WHERE czesci.data_dodania_zapytania >= :data_od AND czesci.data_dodania_zapytania <= :data_do
        ORDER BY id_czesci DESC ;";         

$instrukcja = $pdo->prepare($sql);                                
$instrukcja->bindValue('data_od', $mysqldatetime_OD, PDO::PARAM_STR); 
$instrukcja->bindValue('data_do', $mysqldatetime_DO, PDO::PARAM_STR); 
$instrukcja->execute(); 
$czesci = $instrukcja->fetchAll();
?>

i działa. Dane są pobierane zgodnie z podanymi datami.
Nastąpiło samonaprawienie. 😀

Stało się to jak zrobiłem to co napisałeś: podałem dane czasu od do bezpośrednio w kodzie.
Dziękuję za pomoc.!!!
Czasami tak mam, że coś nie działa i właściwie nic nie zmieniam w kodzie i zaczyna dziaiłać. Nie wiem ale to chyba XAMPP czasami wariuje. Albo baza.

0

Raczej to co przesłałeś w POST jednak jest właściwą daną we właściwym formacie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1