Sıralama TINYTEXT sql mysql db sorgudan zaman veya PHP kullanarak ürettiği diziyi sıralamak

1 Cevap php

Hey çocuklar - Sorun gayrimenkul bilgileri saklamak için kullanılan bir kötü tasarlanmış veritabanından kaynaklanıyor. Ben bir hafta sonu seçin ve bu hafta sonu için açık evler görüntülemek için müvekkilim için bir şablon kurmak. Açık ev kere (ohtime1, ohtime2, ohtime3) AM veya PM bilmenin hiçbir yolu ile, TINYTEXT olarak depolanır. Ve "1:00-03:00" - "2:00 12:00" Ben ohtime1 BY veritabanı ve SİPARİŞ sorguladığınızda biz insanlar öğlen 02:00 ve 01:00-15:00 gibi ayırt ortak girişleri, ancak, tabii ki 01 koyar : 00 00:00 öncesi. Ben zorluk sıralama SQL kullanarak ve farklı php sıralama yöntemleri kullanarak yaşıyorum. Aşağıdaki gibi tüm açık ev bilgileri ile ilk listeleri dizi şey gibi ayarlanır:

$listings[0][displayaddress] = empire state building
$listings[0][baths] = too many to count
$listings[0][ohtime1] = 12:00 - 02:00

$listings[1][displayaddress] = madison square garden
$listings[1][baths] = 2
$listings[1][ohtime1] = 01:00 - 03:00
etc...

Kullandığımız smarty şablonları için işleme yanı sıra, Manhattan ve Brooklyn listeleri için daha sonra tekrar farklı günlerde ayırmak, ve ($ listeleme $ liste) Ben foreach $ ile listeleri ile yineleme. Bu 4 yeni diziler sonuçlanır. Benim teorisi, 24 saatlik zaman 9:00 önce tüm zamanlar dönüştürürseniz, o zaman işe farklı gün / ilçenin atamak sonra, bunları sıralamak oldu. İşte dönüştürme kodu:

$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;

Dönüştürme zor değildi, ama bunları sıralamak için nasıl bir kayıp am. Mysql içine php yaptım 24hrs dönüşüm uygulamak için gibi gelişmiş SQL teorisi tecrübeli değilim. Ben de yeni diziler oluşturmak zaman ben bir sıralama özelliği uygulamak düşünüyordum ama ben bir kaybı tekrar duyuyorum. İşte yeni diziler içine ayırmak için kod:

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;  
}  
}

Ben yeterince bilgi umuyoruz. Okumak için zaman ayırdığınız için ve herhangi bir geri bildirim için teşekkür ederiz!

1 Cevap

İşte türü sütun bir çift TINYTEXT sütunlardan birini dönüştürme örneği 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;