möchte code optimieren

Dobermaniac

Mitglied
folgendes problem....
ick möchte die standorte unserer mitglieder auf einer deutschlandkarte darstellen, die standorte dazu sollen aus einer datenbank kommen und liegen in form von einfachen zahlen vor z.b. 1 oder 4 oder 789.

um auf dhtml zu verzichten, nehme ick für die positionierung eine tabelle mit dem kartenbild als hintergrund. die tabelle ist in paar hundert zellen aufgeteilt. jede zelle stellet einen festen ort(koordinatenpunkt) dar.

die tabelle erstelle ich mit hilfe einer schleife, in jeder zelle wird $zelle++; gesetzt. insgesamt hat die tabelle ca 1000 zellen. wenn $zelle also 5 ist, befinden wir uns im oberen teil der karte sprich: im norden, ist $zelle =900 ist die tabelle schon fast am ende angelangt und wir befinden uns im süden.

jetzt kommt mein denkproblem.
im moment frage ich in jeder zelle die memberdatenbank ab checke ob dort ein member exestiert, bei dem die koordinate==$zelle ist. wenn ja, kommt nen grüner punkt, wenn nein, kommt nen transparentes gif....

das ganze funktioniert perfekt, nur isses ziemlich bescheuert, 1000 mal die tabelle abzufragen, was sich auch im ätzend langsamen seitenaufbau auswirkt. sinnvoller wäre es ja, anfangs alle koordinaten aus der membertabelle abzufragen und in ein array zu packen. und dann irgendwie zu checken, ob in dieser zelle nen memberbild hinmuss...

nur hab ick keine idee wie ick das array in jeder zelle abfrage. kann ich in if abfragen auch arrayinhalte checken und mit $zelle vergleichen ??? wenn ja, kann mir einer sagen wie ? mit genauen codebeispiel...

ps hab code zur vereinfachung gekürzt, kann gut sein, dass er fehlerhaft ist und keinem ordentlichen format enspricht...befinde mich noch im lernstadium :)
danke im vorraus, hier der code + link

beispielseite(noch baustelle)

PHP:
<table background="deutsch_karte.gif">
<tr> 
<?

$zelle = 1;

// schleife um die max. spalten und zeilen festzulegen 
for ($i = 0; $i < 45; $i++) {
for ($sp = 1; $sp <= 36; $sp++) {
// schleife um die max. spalten und zeilen festzulegen 

if ($sp < 36) {

$memberresult=mysql_query("select * from user_table  where koord = '$zelle'");
$memberzugriffe = mysql_num_rows($memberresult);
$memberdata = mysql_fetch_array($memberresult);
?>

<td width="3" height="3">
<? if ($memberzugriffe == 1) { ?>
<img border="0" src="full.gif">
<? } else { ?>
img border="0" src="free.gif"></a>
<? } ?>
</td>
<?
$zelle++; 
} else {
echo "</tr><tr>";
}
}
} 
?>
</tr>
</table>
 
Zuletzt bearbeitet:
mal kurz was anderes. hast du schonmal dran gedacht, dass mit gd zu machen, dann hast du das bild fertig und nicht so einen riesen code mit ner 1000-zellen-tabelle. ich denke, die macht alles langsamer als das ewige abfragen.
 
keine schlechte sache, nur ist dann kaum interaktivität möglich...
bei mouseover ueber einen punkt, passieren ja noch paar ereignisse...darauf müsste ick ja dann verzichten...auch sind die punkte streckenweise animiert, was mit der gd sache auch recht schwer sein dürfte...
 
Arrays

also ich wuerds wenn dann alles in einem schwung auslesen,
da du ja eh alle Daten rausholen musst.
Diese dann einfach in einen array schreiben und diesen dann druchlaufen.
Ist auf jedenfall schneller als immer eine Abfrage zu machen.

mage
 
kleiner hilfeversuch

PHP:
$query = mysql_query("SELECT * FROM name_der_tabelle",$db) or DIE('MySQL-Fehler: '.mysql_error());
while ($erg = mysql_fetch_array($query))
    $array[] = $erg[siehe_kommentar];
    // $erg[xyz] speichert den inhalt der spalte xyz aus der datenbank
// hier dann halt dein schleifenanfang zum aufbau der karte
// das folgende dann einfach mit darein, klar bissl vars ändern aber naja
$count = count($array);
for ($i=0;$i<=$count;$i++)
{
    if ($array[$i] == $karten_quadrat_nr)
    {
        echo "<img src='passt.gif' border='0'>";
        break;
    }
}
// dann der rest ...
sodala ... ka ob es so funzt, viel mir nur grade so ein :)

Grüße, Morph
 
Zuletzt bearbeitet:
Codebeispiel

also ich probiers mal ob ichs ausm stehgreif hinbekomme,
aber gerade kein garantie auf Richtigkeit..
eher gedacht als kleine Orientierungshilfe ;)

PHP:
$koords= array();
$result=mysql_query("select koord from user_table ORDER koord by ASC");
foreach($row=mysql_fetch_row($result))
    $koords[]=$row['koord'];

$posArray=0;
for($i=0;$i<900;$i++ }
{ 
    
  if ($i == $koords[$posArray++]) 
      echo '<img border="0" src="full.gif">';
  else
      echo 'img border="0" src="free.gif">';
}

ungefähr so stell ich mir das vor..
den rest mit den <td> musst du dann selber noch einbauen..
du solltest die abfrage mal so ausführen um zu schauen ob die wirklich richtig geordnet sind.. wenn nicht umdrehen und by DESC sortiern
ich hoffe ich hab es richtig verstanden :)

viel erfolg mage

PS: sieht schon nicht schlecht aus deine Seite :)

> sorry hab hatte bei meiner arrayzuweisung die [] vergessen
 
Zuletzt bearbeitet:
Zurück