2017-06-10 14 views
-1

私は車を雇った日付で各車の配列を取得しようとしています。アイテムの種類ごとに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の場合は車の番号この車がこの時期に使われているという記録があるので、そこにいるはずです。

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

他の場所でリスト全体が必要な場合を除き、SQLステートメントでフィルタを使用する方が効率的です。 – Isac

+0

他の場所でこのリストは必要ありませんが、それは今では病気です。 – marijn

+0

SELECT * FROM invoice_line WHERE car_id = $ carとstart_date> = '$ start_date'とend_date <= '$ end_date' – Isac

答えて

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 | 
+--------+----------------+------------+------------+ 

を。

メモ私の正気を保つために、カラム名を少し修正しました。

+0

もう1人のコメント者は、これが完全にsqlで処理されることを提案しましたが、今はそれがOPの目的です。私はまだ何も試してみる時間がありませんでした。私は、同じcar_idで複数の修飾行を処理する方法についてOPに尋ねる必要があると思います... ]?OPは、(別途)失格ではない予選ローをすべて見たい。 (それは混乱する質問です) – mickmackusa

関連する問題