2013-12-10 59 views
0

我想显示一个表与PHP MYSQL的FIELD是日期和行是TIME从MySQL数据库与未知/无限记录,一个与不同的时间为同一日期,通过查询它的约会时间。多个日期日期时间

我的mysql日期将dateTime存储在同一列中,但我正在分割它并尝试单独显示它们。但我似乎无法显示日期只有一次和多次,这只是两个。

$sql_result = mysqli_query($connection, "SELECT DATE(date_time) AS date_part, TIME(date_time) AS time_part FROM $table WHERE date_time LIKE '$date_input%'"); 

if (mysqli_num_rows($sql_result) == 0) 
{ 
echo "<p>No bookings exist.</p>"; 
} 

else { 

echo "<h3>Results for booked " . $table . " Appointments:</h3>"; 

echo "<h3>" . $formattedDate ."</h3>"; 



while ($row = mysqli_fetch_array($sql_result)) 
{ 

    echo $row['date_part']; 

$array_time = array($row['time_part']); 

foreach ($array_time as $time_output)     
    { 
echo $time_output; 
} 
    } 
} 

我的输出是这样的:

2013-12-0809:00:002013-12-0810:00:002013-12-0811:00:002013-12-0812:00:002013-12-0814:00:002013-12-0815:00:002013-12-0816:00:002013-12-0817:00:002013-12-0909:00:002013-12-0809:00:00 

不过,我想这样的:

2013-12-08  09:00:0010:00:0011:00:0012:00:0014:00:0015:00:0016:00:0017:00:0009:00:000 
2013-12-09  9:00:00 

回答

1

Hrrmm。即使世界有点逻辑问题在这里:

while ($row = mysqli_fetch_array($sql_result)) 
{ 

    echo $row['date_part']; 

$array_time = array($row['time_part']); // HERE 

foreach ($array_time as $time_output)     
    { 
echo $row['time_part']; 
} 
    } 

$ array_time永远只有一个值,因为$row['time_part']仅指一行(的while ($row = mysqli_fetch_array($sql_result))每次迭代重新分配一个单独的行$行)

尝试做这第一遍定义一个可行的阵列

while ($row = mysqli_fetch_array($sql_result)) 
{ 
$array[$row['date_part']][$row['time_part']] = 1; // the value assigned doesn't matter, all we wish is a definite hierarchy 
    } 

这会给你喜欢的数组:

['2013-12-08']['9:08'] = 1 
       ['12:30'] = 1 
       [23:17] = 1 
['2013-12-09']['10:00'] = 1 
       [14:20] = 1 

然后!你可以通过你的结果进行foreach

foreach ($array as $date_part => $array_time) 
{ 
echo $date_part . '&nbsp;&nbsp;'; 
foreach ($array_time as $time_part => $i) // again our $i is not used 
    { 
    echo $time_part; 
    } 
echo '<br>'; // here it breaks line after all times for the date has been echoed 
} 
+0

你的逻辑非常棒。这工作完美。尽管第一部分我不得不将“time_part”输入$ array [$ row ['date_part']] [$ row ['TIME_PART']] = 1;为它执行(否则错误消息:无效索引)。非常感谢您的帮助! – ESavage

+0

噢对不起,很高兴你知道它,我忘了写在单引号:) –

0

您需要GROUP在查询:

SELECT DATE(date_time) AS date_part, TIME(date_time) AS time_part 
FROM $table 
WHERE date_time LIKE '$date_input%' 
GROUP BY date_part 
+0

感谢您的回复。 GROUP BY date_part(* GROUP BY DATE(date_part)*)仅为每个DATE返回1个TIME结果。 2013-12-0809:00:002013-12-0909:00:00。但可能是在正确的轨道 – ESavage

0

我想我明白你的意思试图说,但是,MySQL不会创建一个多维数组。你应该尝试这样的事:

$dates = array(); 
while ($row = mysqli_fetch_array($sql_result)) { 

    $dates[$row['date_part']][] = $row['time_part'] 
} 

然后,你可以有这样的事情:

foreach ($dates as $key => $value) { 

    echo $key.'<br />'; 
    foreach ($value as $time) { 
     echo $time.' - '; 
    } 
    echo '<br />'; 
} 

这应该是这个样子:

2013-09-01 
09:00 - 09:30 - 10:20 - 11:00 

2013-09-02 
10:12 - 11:00 - 12:24 //etc 

希望这有助于!

+0

让它看起来更像你的改变'echo $ time'。 - ';'echo'time。':';' –

0

两条评论。首先,您似乎需要按时间订购,以订购您的记录。

SELECT DATE(date_time) AS `date_part`, TIME(date_time) AS `time_part` 
FROM $table 
WHERE date_time LIKE '$date_input%' 
ORDER BY date_time ASC 

其次,如果我正确地读你的问题,好像你要输出的数据转换成两列,一个日期和其他所有时间该日期。您可以考虑使用GROUP_CONCAT()在SQL中执行此操作,使您的输出变得简单。

SELECT DATE(date_time) AS `date_part`, GROUP_CONCAT(TIME(date_time)) AS `times` 
FROM $table 
WHERE date_time LIKE '$date_input%' 
GROUP BY `date_part` 
ORDER BY date_time ASC 

这将使输出像

date_part times 
2013-12-08 11:22:33,11:33:44,12:44:55 
2013-12-09 12:00:00 

通过这种方法,就没有必要建立一个PHP多维数组,因为数据会来的数据库就是这个样子的了你需要它。这也意味着您不需要将整个结果集加载到内存中以便使用它(正如创建多维数组所需的那样)。

+0

是的,这工作得很好!,非常感谢。但数组的输出如你所说,但时间是一个值“11:22:33,11:33:44,12:44:55”,所以如果可能的话我需要分割它们以输出它们垂直。请原谅我对阵列的不熟悉! – ESavage

+0

@savage如果您需要分割时间值,只需使用我发布的第一个查询。我不确定你需要输出什么,所以我给出了两种选择。 –