2017-06-10 2 views
-1

Ich versuche, eine Reihe von jedem Auto mit den Daten, die das Auto angestellt ist, zu bekommen.Erhalten Sie alle Daten zwischen 2 Daten aus der Datenbank pro Art von Artikel

Bisher habe ich eine Funktion, die alle Daten aus allen Rechnungszeilen anstelle eines Arrays für jedes Auto erhält. Wie kann ich das zur Arbeit bringen?

Mein Ziel wird es sein, eine Liste der Autos zu bekommen, die im ausgewählten Zeitraum verfügbar sind, aber zuerst versuche ich, es mit statischem Start und Enddatum zum Laufen zu bringen. Ich dachte daran, eine Schleife zu bekommen, die alle verschiedenen Auto-IDs bekommt und für jede Auto-ID wird ein Array erstellt, das alle Daten enthält.

<?php 
$start_date = '2017-06-12'; 
$end_date = '2017-06-14'; 
$items = array(); 

$result = mysqli_query($con, "SELECT * FROM invoice_line "); 
$carid = null; 
while ($car = mysqli_fetch_array($result)) { 
    $carid = $car['car_car_id']; 
    echo $carid; 
    //second part 
    $car = mysqli_query($con, "SELECT * FROM invoice_line WHERE car_car_id = '$carid' AND start_date>='$start_date' AND end_date<='$end_date'"); 
    while ($car_available = mysqli_fetch_array($car)) { 
    echo $car_available['car_car_id']; 
    } 
} // end second part 

?> 
<?php 
function getDateRange($startDate, $endDate, $format="Y-m-d") 
{ 
    //Create output variable 
    $datesArray = array(); 
    //Calculate number of days in the range 
    $total_days = round(abs(strtotime($endDate) - strtotime($startDate))/86400, 0) + 1; 
    //Populate array of weekdays and counts 
    for($day=0; $day<$total_days; $day++) 
    { 
     $datesArray[] = date($format, strtotime("{$startDate} + {$day} days")); 
    } 
    //Return results array 
    return $datesArray; 
} 
?> 

Update: änderte ich den Code zu dem, was ich habe auf die Kommentare jetzt basiert, statt mir alle Autos geben, die nicht in Gebrauch sind die mir die Autos geben, wo der Start- und Enddatum irgendwo zwischen das $ start_date end $ end_date. Also, wie kann ich das verwenden, um eine Liste der Autos zu erhalten, die in diesem Zeitraum nicht verwendet werden. Hier unten ist ein Beispiel der DB, wie Sie sehen können, dass mehrere Datensätze mit derselben Dose aber in einem anderen Zeitraum sein können. Zum Beispiel wenn $ start_date ist 2017-02-03 und $ end_date ist 2017-02-05 Auto Nummer 1 und 3 sollte dort sein, aber wenn das Startdatum ist 2017-06-11 Ende und Datum ist 2017-06-13 nur Auto-Nummer man sollte dort sein, weil es eine Aufzeichnung dieses Autos gibt, das in diesem Zeitraum benutzt wird.

data

-- phpMyAdmin SQL Dump 
-- version 4.6.4 
-- https://www.phpmyadmin.net/ 
-- 
-- Host: localhost:8889 
-- Generation Time: Jun 11, 2017 at 10:43 AM 
-- Server version: 5.6.28 
-- PHP Version: 7.0.10 

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 

-- 
-- Database: `rentacar` 
-- 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `invoice_line` 
-- 

CREATE TABLE `invoice_line` (
    `car_car_id` int(10) UNSIGNED NOT NULL, 
    `invoice_invoice_number` int(10) UNSIGNED NOT NULL, 
    `start_date` date NOT NULL, 
    `end_date` date NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

-- 
-- Dumping data for table `invoice_line` 
-- 

INSERT INTO `invoice_line` (`car_car_id`, `invoice_invoice_number`, `start_date`, `end_date`) VALUES 
(3, 2, '2017-06-12', '2017-06-14'), 
(2, 2, '2017-06-10', '2017-06-20'), 
(1, 1, '2017-06-01', '2017-06-03'); 

-- 
-- Indexes for dumped tables 
-- 
+0

ist es viel effizienter, den Filter auf der SQL-Anweisung zu haben, so dass Sie nur diejenigen erhalten, die Sie brauchen, es sei denn, Sie brauchen die ganze Liste an anderer Stelle – Isac

+0

Ok ich brauche diese Liste nirgendwo anders, aber ich bin nicht so gut mit Abfrage aber sieh es jetzt an – marijn

+0

SELECT * FROM invoice_line WHERE car_id = $ auto und start_date> = '$ start_date' und enddatum <= '$ end_date' – Isac

Antwort

0

Dies ist ein Ergebnis das Datum jedes Auto gemietet wurde Darstellung:

SELECT * FROM invoice_line; 
+--------+----------------+------------+------------+ 
| car_id | invoice_number | start_date | end_date | 
+--------+----------------+------------+------------+ 
|  3 |    2 | 2017-06-12 | 2017-06-14 | 
|  2 |    2 | 2017-06-10 | 2017-06-20 | 
|  1 |    1 | 2017-06-01 | 2017-06-03 | 
+--------+----------------+------------+------------+ 

Sie können es nur auf ein Array umwandeln, wie würden Sie jedem anderen Ergebnis.

Hinweis Ich habe die Spaltennamen leicht geändert, um meine geistige Gesundheit zu bewahren.

+0

Ein anderer Kommentator vorgeschlagen, dass dies vollständig in SQL behandelt werden und das ist, was das OP ist. Ich habe noch keine Zeit gehabt, etwas zu versuchen, und ich denke, ich muss das OP fragen, wie man mit der gleichen 'car_id' mehrere qualifizierende Zeilen behandelt ... aber das kann nicht mit einer WHERE NOT IN [Unterabfrage getan werden ]?OP möchte alle qualifizierenden Zeilen sehen, die nicht (separat) disqualifiziert sind. (Es ist eine verwirrende Frage) – mickmackusa

Verwandte Themen