私は車を雇った日付で各車の配列を取得しようとしています。アイテムの種類ごとに2つの日付間のすべての日付を取得します
これまでのところ、各自の車ごとの配列ではなく、すべての請求書の行からすべての日付を取得する関数があります。これをどのように機能させることができますか?
私の目標は、選択した期間に利用可能な車のリストを取得することですが、まず静的な開始日と終了日を使用するようにしようとしています。 私はすべての異なる車の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_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
--
他の場所でリスト全体が必要な場合を除き、SQLステートメントでフィルタを使用する方が効率的です。 – Isac
他の場所でこのリストは必要ありませんが、それは今では病気です。 – marijn
SELECT * FROM invoice_line WHERE car_id = $ carとstart_date> = '$ start_date'とend_date <= '$ end_date' – Isac