0

こんにちは - この問題は、不動産情報を保存するために使用されるデータベースの設計が不十分であることが原因です。クライアントが週末を選択し、その週末のオープンハウスを表示するためのテンプレートを設定しました。オープンハウスの時間 (ohtime1、ohtime2、ohtime3) は tinytext として保存され、AM や PM を知る方法はありません。「12:00 - 2:00」および「01:00 - 03:00」は、人間が正午から午後 2 時および午後 1 時から午後 3 時と認識する一般的なエントリですが、データベースにクエリを実行して ORDER BY ohtime1 を実行すると、明らかに 01 となります。 :00 12:00前。SQL を使用して、さまざまな php ソート方法を使用してソートするのが困難です。すべてのオープン ハウス情報を含む初期リスト配列は、次のように設定されます。

$listings[0][displayaddress] = エンパイア ステート ビルディング
$listings[0][baths] = 数えきれない
$listings[0][ohtime1] = 12:00 - 02:00

$listings[1][displayaddress] = マディソン スクエア ガーデン
$listings[1][baths] = 2
$listings[1][ohtime1] = 01:00 - 03:00
など...

foreach($listings as $listing) を使用して $listings を繰り返し処理し、使用するスマートなテンプレートを処理し、異なる日に分割してから、マンハッタンとブルックリンのリストを再度処理します。これにより、4 つの新しいアレイが作成されます。私の理論は、午前 9 時より前のすべての時間を 24 時間に変換し、それらを並べ替えてから、別の日/区に割り当てるとうまくいくというものでした。変換コードは次のとおりです。

$p = explode("-",$listing[ohtime1]);  //01:00 - 03:00
    $time1 = trim($p[0]); //01:00
    $time2 = trim($p[1]); //03:00
    $hour1 = substr($time1,0,2);  //01
    $hour2 = substr($time2,0,2);  //03
    $min1 = explode(":",$time1);  
    $min2 = explode(":",$time2);
    $min1 = $min1[1]; //00
    $min2 = $min2[1]; //00

    //convert all times to 24 hour
    if($hour1 < 9) $hour1 = $hour1+12; //13
    if($hour2 < 9) $hour2 = $hour2+12; //15
    $listing[ohtime1] = $hour1.":".$min1." - ".$hour2.":".$min2; //13:00 - 15:00
    $listing[hour1] = $hour1;
    $listing[hour2] = $hour2;

変換は難しくありませんでしたが、並べ方に困っています。私はphpで行った24時間への変換をmysqlに実装するための高度なSQL理論に精通していません。また、新しい配列を作成するときに並べ替え機能を実装できると考えていましたが、やはり途方に暮れています。新しい配列に分離するためのコードは次のとおりです。

foreach($openhouse_date_fields as $oh){ //3 possible open house dates  
if(substr($listing[$oh], 0,10) == $date) {  //if any of the listings's open houses match the first search date  
    if($listing[sect] == "Brooklyn") {  
       $listingsb[$listing[displayaddress]] = $listing;  
    }  
    else  
       $listingsm[$listing[displayaddress]] = $listing;  
}  
elseif(substr($listing[$oh], 0,10) == $date2) { //if any of the listings's open houses match the second search date  
      if($listing[sect] == "Brooklyn")  
      $listingsb2[$listing[displayaddress]] = $listing;  
      else  
       $listingsm2[$listing[displayaddress]] = $listing;  
}  
}  

それが十分な情報であることを願っています。お読みいただき、フィードバックをお寄せいただきありがとうございます。

4

1 に答える 1

0

TINYTEXT列の 1 つを type の列のペアに変換する例を次に示しTIMEます。

SELECT
 MAKETIME(start_hour  + IF(start_hour<9, 12, 0), start_minute, 0) AS start_time,
 MAKETIME(finish_hour + IF(start_hour<9, 12, 0), finish_minute, 0) AS finish_time
FROM (
 SELECT
  SUBSTRING_INDEX(SUBSTRING_INDEX(ohtime1, ' - ',  1), ':',  1) AS start_hour,
  SUBSTRING_INDEX(SUBSTRING_INDEX(ohtime1, ' - ',  1), ':', -1) AS start_minute,
  SUBSTRING_INDEX(SUBSTRING_INDEX(ohtime1, ' - ', -1), ':',  1) AS finish_hour,
  SUBSTRING_INDEX(SUBSTRING_INDEX(ohtime1, ' - ', -1), ':', -1) AS finish_minute
 FROM MyOpenHouseTable) t
ORDER BY start_time;
于 2009-08-22T00:30:09.547 に答える