我正在尝试获取每辆车的数组,其中包含租用汽车的日期。
到目前为止,我有一个函数可以获取所有发票行的所有日期,而不是每辆汽车都有自己的数组。我怎样才能让它发挥作用?
我的目标是获取所选时段内可用的汽车列表,但首先我要尝试使用静态开始和结束日期。 我想要得到一个循环,它获得所有不同的车辆ID,并且对于每个车辆ID,它将创建一个包含所有日期的数组。
<?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;
}
?>
更新: 我根据评论将代码更改为现在的代码,而不是给我所有未使用的汽车,而是给我开始和结束日期介于$ start_date end $ end_date之间的汽车。那么我该如何使用它来获得那段时间未使用的汽车列表。在这下面是一个DB的例子,你可以看到可以是多个记录,但是在不同的时间段内可以相同。例如,如果$ start_date是2017-02-03而$ end_date是2017-02-05,则车号1和3应该在那里,但如果start_date是2017-06-11结束且日期是2017-06-13只有车号一个人应该在那里,因为这段时间内有这辆车的使用记录。
-- 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 :(得分:0)
这是描述每辆车被雇用的日期的结果:
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 |
+--------+----------------+------------+------------+
您可以将其转换为数组,就像其他任何结果一样。
注意我已经稍微修改了列名,以保持我的理智。