Minimalwert aus Tabelle auslesen, MySQL

hi,
ich hab folgendes problem:
ich habe ne tabelle mit vielen verschiedenen zahlenwerten. Ich habe außerdem einen vom User angegebenen Zahlenwert. NUn möchte ich aus der Tabelle nur den Zahlenwert auslesen, wo „Zahlenwert aus Tabelle“ - „Zahlenwert von User“ am kleinsten ist.
Ich habe es zuerst mit

versucht. Dies ging aber nicht. Hat irgendjmd einen Vorschlag, wie man dieses Problem löst?

danke schonmal :wink2:
mfg Brio

Schau dir das mal an:
infos24.de/mysqle/handbuch/3 … ount.htm#8

(as verändert nur den namen)

Guten :morgen:

wenn ich das richtig verstanden habe, liegt es nicht am Min() ansich, sondern daran das mysql im query nicht rechnet. Wenn du dir vorstellst das ein Select eine Abfrage auf eine Tabelle darstellt, die erst durch mysql_query(); ausgeführt wird, siehst du, das du mit zahlenwert_tabelle noch gar nicht rechnen kannst, da der Wert noch unbekannt ist.
Min(), Count(), Group(), Sort(), haben keinen Einfluss auf das auslesen der Daten ansich, sie formatieren lediglich das Ergebnis in angegebener Form.

Ich kenn den Aufbau deiner Tabellen nicht, aber entweder musst du die Struktur der Tabelle ändern oder die Werte zum berechnen vorher schon auslesen, dann berechnen und evtl. eine neue Abfrage auf die Datenbank machen.

Vielleicht gibst du mal deine Struktur preis und wir kucken mal ob man das irgendwie optimieren kann :slight_smile:

Ich bin mir nicht sicher aber wen du mit “ORDER BY” die ausgabe sortierst und mit “LIMIT 1” nur den ersten Wert ausgibst müsste es doch auch gehn???

MfG

BeenGreen

Mach noch eine Spalte “diff”… nach der kann man sortieren…

ok, dann hol ich mal ein bisschen weiter aus :smiley:

Das ganze ist als Hilfe für das Onlinespiel D********t (Ich will hier keine Werbung machen :wink: ) gedacht. Dort gibt es eine riesige Karte mit ca. 1 Billionen Feldern mit X- und Y- Koordinaten. Dabei gibt es besondere Ort auf der Karte. Man selbst „fliegt“ nun auch auf dieser Karte herum. UNd jetzt wollte ich ein Script schreiben bei dem man seine eigenen momentanen Koordinaten angibt und dann aus einer Datenbank, die die Koordinaten der besonderen Orte enthält der am kürzesten entfernteste Ort angegeben wird.

Kleine Skizze der Karte:

man selbst ist an der roten Stelle (X:4 Y:5)
Es gibt „besondere“ Orte an X:1 Y:1, X:6 Y:3 und X:4 Y:8

die Koordinaten der Orte habe ich in einer Tabelle gespeichert:

|Id | X | Y |

| 1 | 1 | 1 |
| 2 | 6 | 3 |
| 3 | 4 | 8 |

Das Script soll nun nach der Eingabe der eigenen Koordinaten den am kürzesten entfernten Ort liefern.

ich es jetzt zuerst einmal so gelöst:
http://brio.bplaced.net/df/index.php?inc=showthings.php
mit Satz des Phytagoras berechne ich die Entfernung von allen und man muss isch selbst den nähesten aussuchen. Aber es gibt 2 Milliarden dieser Orte und wenn die alle in der DB sind kann das lange dauern :unamused:

so, viel zu lesen :slight_smile: ich hoff ihr machts trotzdem

mfg Brio

Musst du wohl doch mit PHP ausrechnen…

Moin,

also folgendes dazu:

  1. Die Berechnung würde ich mit PHP realisieren.
  2. Warum willst du alle berechnen? Es macht doch mehr Sinn z.B. nur die nächsten 5 zu berechnen und den Nutzer diese zur Auswahl zu stellen.

MfG
myPages

hi, das mit den allen berechnen war nur ne übergangslösung.
Ich habs jetzt erstmal so gelöst:

[code]$sql = „SELECT posx, posy FROM planets_unsettled“;
$result = mysql_query ($sql);

echo "Deine Koordinaten: X: ".$posx." Y: ".$posy."<br /><br />";

$distance1 = 1000000000000000000000000;
while($row = mysql_fetch_array($result))
	{
	//neue Distanz
	$posx_planet_un = $row['posx'];
	$posy_planet_un = $row['posy'];
	$distance = pow( pow($posx_planet_un - $posx, 2) + pow($posy_planet_un - $posy, 2), 0.5);
	
	//vorgänger kleiner?
	if ($distance < $distance1)
		{
		$distance1 = $distance;
		$posx_planet_un1 = $posx_planet_un;
		$posy_planet_un1 = $posy_planet_un;
		}
	else
		{
		$distance = $distance1;
		}
	}
	
	//Richtung in die geflogen werden muss
	if ($posy < $posy_planet_un1)
		{
		$richtung = "süd";
		}
	elseif ($posy == $posy_planet_un1)
		{
		$richtung = "";
		}
	else
		{
		$richtung = "nord";
		}
		
	if ($posx < $posx_planet_un1)
		{
		$richtung .= "osten";
		}
	elseif ($posx == $posx_planet_un1)
		{
		$richtung .= "bleiben";
		}
	else
		{
		$richtung .= "westen";
		}
	
	echo "Nächster <b>unbesiedelter Planet</b>: X:".$posx_planet_un1." Y: ".$posy_planet_un1." <b>Distanz</b>: ".round($distance)." (von dir aus Richtung ".$richtung.")<br />";[/code]

werde aber noch ein bissl dran arbeiten. Danke für die schnelle und gute Hilfe :wink2: