Select einer Tabelle mit Auswahlfunktion

CreativPur

Erfahrenes Mitglied
Hi,
ich habe eine Tabelle, welche ich mir per row ausgeben kann.
Diese Tabelle beinhaltet eine Spalte "sendetatum".

Nun möchte ich nur die Daten (Datum) auslesen, welche ich zuvor mit einem Form eingebe.

Meine misslungenen Versuche..
Abfrage:
PHP:
$bw_von = htmlspecialchars($_GET['bw_von']);
$bw_bis = htmlspecialchars($_GET['bw_bis']);

$sql = "SELECT
    date_format(sendedatum, '%d.%m.%Y')sendedatum,
    FROM
    Bewerbungen_Versenden
    WHERE
    Bewerber_id = $Bewerber_id AND versendet = 1 AND sendedatum >= $bw_von AND sendedatum <= $bw_bis  ORDER BY sendedatum DESC
    ";

Mein Formular:
HTML:
<form action="#" method="GET">
<div class="col-lg-3">
<label class="green">Zeitraum</label><br /> 
<p>von: <input type="text" id="datepicker">&nbsp;<input type="hidden" name="bw_von" id="alternate" size="30">
&nbsp;&nbsp;bis: <input type="text" id="datepicker2">&nbsp;<input type="hidden" name="bw_bis" id="alternate2" size="30"></p>
</div>
<div class="col-lg-3">
<button type="submit" class="btn btn-warning btn-xs" style="margin-top:25px;">Bewerbungen anzeigen</button>
</div>
</form>

Das Script für Alternativ-Date:
Code:
$( function() {
    $( "#datepicker" ).datepicker({
      altField: "#alternate",
      altFormat: "yy-mm-dd"
    });

$( function() {
    $( "#datepicker2" ).datepicker({
      altField: "#alternate2",
      altFormat: "yy-mm-dd"
    });

Wenn ich das Datum manuell eingebe, funktioniert es soweit.
wenn ich z.B. von 06.12.2017 (2017-12-06) bis 09.12.2017 (2017-12-09) eingebe, wird mir allerdings nur der Zeitraum bis 08.12.2017 angezeigt.

wo liegt mein Gedankenfehler ?
 
Ich habe es hin bekommen..
PHP:
$bw_von = htmlspecialchars($_GET['bw_von']);
$bw_bis = htmlspecialchars($_GET['bw_bis']) +1;
Bewerber_id = $Bewerber_id AND versendet = 1 AND sendedatum >= '$bw_von' AND sendedatum <= '$bw_bis'  ORDER BY sendedatum DESC
 
Shit..
Das mit der +1 Funktioniert noch nicht..

Gebe ich von 01.02.2017 - 10.02.2017 ein, unterdrückt er mir die Daten von 10.02.2017
 
Ich habe noch ein kleines Problem bei der Abfrage.
PHP:
Bewerber_id = $Bewerber_id AND versendet = 1 AND sendedatum >= '$bw_von' AND sendedatum <= '$bw_bis'  ORDER BY sendedatum DESC

Wie kann ich erreichen, dass beim Aufruf der Seite zuerst alle Daten angezeigt werden, und je nach Bedarf erst die ausgewählten Daten ausgegeben werden ?

Ich habe es mit OR versucht, leider ohne Erfolg
PHP:
Bewerber_id = $Bewerber_id AND versendet = 1 OR sendedatum >= '$bw_von' AND sendedatum <= '$bw_bis'  ORDER BY sendedatum DESC
 
Hallo,

da wirst du nicht drum herum kommen zwei querys zu schreiben.
PHP:
if($bw_von && $bw_bis)
{
    $condition = "Bewerber_id = $Bewerber_id and sendedatum  between '$bw_von' and '$bw_bis'";
}
else
{
   $condition = "Bewerber_id = $Bewerber_id";
}

$query = 'SELECT * FROM my_table WHERE '. $condition;
 
Ok..
Was bedeutet das between ?

Es funktioniert soweit, nur werden mir nicht die Tage des letzt eingegebenen Datums ausgegeben.
Gebe ich bis 10.12.2017 ein, so erfolgen nur die Einträge bis 09.12.2017
 
Ahja... ok..
Wieder etwas das gelernt.. Danke.

Weißt du denn, warum
mir nicht die Tage des letzt eingegebenen Datums ausgegeben werden ?
Gebe ich bis 10.12.2017 ein, so erfolgen nur die Einträge bis 09.12.2017
 
Wenn Ich mich nicht Irre, hab Ich glaub Ich zu Hause mein Query liegen der genau dein Problem beschreibt und es ggf. beheben könnte. :)

Beispiel 1:
PHP:
$sqlFromPeps = $db->__query("SELECT m.*, w.* FROM tk_agents m LEFT JOIN working w ON(m.email = w.name) WHERE {$setSqlAgent}m.getteam='".$agentTeam."' AND workDate BETWEEN '".$agentTimeFrom."' AND '".$agentTimeTo."' AND w.isRegular = '0' ORDER BY w.id DESC");

Beispiel 2:
PHP:
$sqlTimers = $db->__query("SELECT m.*, w.* FROM tk_agents m LEFT JOIN working w ON(m.email = w.name) WHERE {$setSqlAgent}m.getteam='".$saveTeam."' AND workDate BETWEEN '".$createDate1."' AND '".$createDate2."' AND w.isRegular = '0' ORDER BY w.id DESC");

Versuch es mal an deines anzupassen :)
Also bei mir funktioniert es zu mindestens
 
Zurück