Eine matrix mit Orten navigieren

GarGod

Erfahrenes Mitglied
Hallo, ich habe ein kleines Problem und zwar habe ich eine Datenbank in der es verschiedene daten gibt, die alle eine ID mit primarykey haben.
nun möchte ich das ich diese in einer Matrix darstellen kann, wobei ich dann per $_Get den Datensatz angeben möchte, der sich in der Mitte befindet.
Zu dem kommt noch das ich eine Zoom funktion eingebaut habe, die sagt, wie groß der Auschnitt aus der gesamten matrix sein soll. Wobei der Zoomfaktor automatisch immer in einer ungerade zahl gewandelt wird, da es ja sonst keine mitte gibt;).
Da das jetzt etwas schwer zu verstehen ist, hier einmal ein kleines grafische skizze

zoom 3 bei einer Matrix von 6x6 wo 16 in der Mitte stehen soll:
Code:
 9 | 10 | 11
15| 16|17
21|22 |23

zoom 5 bei einer Matrix von 6x6 wo 16 in der Mitte stehen soll:
Code:
 2 | 3 | 4 | 5 | 6
 8 | 9 |10|11|12
14|15|16|17|18
20|21|22|23|24
26|27|28|29|30

Das ganze habe ich auch bereits umgesetzt und zwar wie folgt:

PHP:
//Größe der Matrix ausrechnen
$sql = "SELECT COUNT(*) FROM `planet` WHERE `s_id` = '".$_GET['s_id']."'";
$panzahl = mysql_result(mysql_query($sql),0);
$felder = round(sqrt($panzahl) +0.5);

//Zoom setzen (habe das jetzt mal gekürzt)
$zoom = 3;

//Datensatz der Zentriert werden soll
$pcenter = $_GET['pnr'];

// Berechnung der mitte
$mitte = round($zoom / 2);

//Bilden des Query´s
$sql = "SELECT * FROM 
					`planet` 
				WHERE 
					`pnr`";
					
		for($i=1; $i<$mitte; $i++){
			$von = $pcenter - ($i * $felder) -$mitte +1; 
			$bis = $von + $zoom -1; 
			if($i==1){
				$sql.="  BETWEEN '".$von."' AND '".$bis."'";
			}else{
				$sql.=" OR `pnr` BETWEEN '".$von."' AND '".$bis."'";
			}
			$sql.=" AND `s_id` ='".$_GET['s_id']."'";
		}
		$von = $pcenter -$mitte+1;
		$bis = $von + $zoom -1;
		$sql.="<br> OR `pnr` BETWEEN '".$von."' AND '".$bis."'";
		$sql.=" AND `s_id` ='".$_GET['s_id']."'";
		
		for($i=1; $i<$mitte; $i++){
			$von = $pcenter + ($i * $felder) -$mitte +1; 
			$bis = $von + $zoom -1; 
			$sql.=" OR `pnr` BETWEEN '".$von."' AND '".$bis."'";
			$sql.=" AND `s_id` ='".$_GET['s_id']."'";
		}

Daraus resultiert dann ein query wie dieser:
Code:
SELECT * FROM `planet` WHERE `pnr` BETWEEN '22' AND '24' AND `s_id` ='2'
OR `pnr` BETWEEN '28' AND '30' AND `s_id` ='2' OR `pnr` BETWEEN '34' AND '36' AND `s_id` ='2'

Bis hierhin funktioniert ja alles wunderbar, nur kannes ja jetzt durchaus sein, dass als Element das es zu Zentrieren gilt in einer 6x6 Matrix die 1 ist, dann würde sich die gesamte matrix umstellen und zudem würde nach negativen zahlen in der Datenbank gefragt.
Meine Idee war es nun, meinen Quellcode so um zuändern, dass wenn als Zenterelement ein Randelement kommt, wo durch der Zoom die Struktur der Matrix zerstört würde, den Focus des Zooms auf ein anderes Element zu legen und somit dem ganzen vorzubeugen.
Ich weiß jetzt nicht, ob, dass jetzt überhaupt jemand versteht, aber meine Gedanken sind gerade sowas von dermaßen verstrahlt, so dass es für mich schwer ist mein Problem in klare Worte zu fassen.
LG.
Garlof
 
Zuletzt bearbeitet:
Zurück