Kalle_B: Anzeigetafel: Mehrfache Einträge erkennen, zusammenfassen

Beitrag lesen

Hallöle,

ich habe eine Seite gebaut, die Events ähnlich einer Abflugtafel auf Flughäfen anzeigt. Sie wird alle 60 sec aktualisiert. Mehrere gleichartige Events an einem Tag sollen aber nur eine Position beanspruchen. Ob das wohl mit einer geschickten SQL- Abfrage geht?

Was gemeint ist, seht ihr in Heidelberg am 13.06.2010. Das Solarboot fährt 6 mal am Tag und verdrängt dadurch andere Events von der Anzeige.

Ich möchte die Solarboot- Anzeige so:

10:00 Solarboot
      auch um 11:30, 13:00, 15:00, 16:30, 18:00

Allerdings stehen die gleichartigen Events nicht uhrzeitmäßig hintereinander, es können andere Events dazwischenkommen. Im Moment habe ich keine Idee, wie ich die Events zusammenfassen kann.

Das jetzige SQL- Kommando:

  $q = "  
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
# UMKREIS-ORTE MIT OEFFTL. VERANSTALTUNGEN LESEN  
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
SELECT  
 SQL_CALC_FOUND_ROWS  
 ter1.*  
,ter1.id                    TID  
,DATE_FORMAT(ter1.tag,'%w') wotag  
,ter1.geo_breite            ter_lat  
,ter1.geo_laenge            ter_lon  
  
,ort1.*  
,ort1.id            ORT  
,ort1.plz           ort_plz  
,ort1.name          ort_name  
  
,vtr1.id            VIP  
,vtr1.firma1        vtr_firma1  
  
,typ1.id            TYP  
,typ1.gruppe        typ_gruppe  
,typ1.name          typ_name  
  
-- dist = 6378.388 * acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1))  
-- 62831.853  
-- 6366.19773095  
,ROUND( 6366.19773095 * ACOS( SIN(".$rad_lat1.") *SIN(RADIANS(IF(ter1.geo_breite IS NULL,ort1.geo_breite,ter1.geo_breite))) +COS(".$rad_lat1.") *COS(RADIANS(IF(ter1.geo_breite IS NULL,ort1.geo_breite,ter1.geo_breite))) *COS(RADIANS(IF(ter1.geo_laenge IS NULL,ort1.geo_laenge,ter1.geo_laenge)) -".$rad_lon1." )) *1000.0) /1000.0 dist_km  
FROM      ".$db[0]['orte']." ort1  
         ,".$db[0]['termine']." ter1  
LEFT JOIN ".$db[0]['adressen']." vtr1  
ON        vtr1.id = ter1.veranstalter_id  
LEFT JOIN ".$db[0]['termintypen']." typ1  
ON        typ1.id = ter1.typ_id  
WHERE     ter1.ort_id = ort1.id AND ter1.intern_kz=0 AND ter1.tag >= '".$arr_in['tag_von']."' AND ter1.tag <= '".$arr_in['tag_bis']."'  
AND       ROUND( 6366.19773095 * ACOS( SIN(".$rad_lat1.") *SIN(RADIANS(IF(ter1.geo_breite IS NULL,ort1.geo_breite,ter1.geo_breite))) +COS(".$rad_lat1.") *COS(RADIANS(IF(ter1.geo_breite IS NULL,ort1.geo_breite,ter1.geo_breite))) *COS(RADIANS(IF(ter1.geo_laenge IS NULL,ort1.geo_laenge,ter1.geo_laenge)) -".$rad_lon1." )) *1000.0) /1000.0 < ".$arr_in['KM']."  
#ORDER BY  dist_km, ter1.tag, ter1.uhr  
ORDER BY  ter1.tag, ter1.uhr, dist_km  
LIMIT 0,20  
";  

Freue mich auf Ideen.

Gruß, Kalle