MySQL die Ausgabe berechnen lassen anhand von PHP Variablen - möglich?

preko

Erfahrenes Mitglied
Hi,

ich möchte eine Datenbankabfrage einsetzen, die anhand von PHP Variablen eine Berechnung ausführt und anhand dieser Berechnung eine Query generiert.

Ich schreibe es mal so dar wie ich es mir vorstelle - vielleicht versteht man es besser:
PHP:
$lat_1 = '5';
$lat_2 = '7';
$lng_1 = '8';
$lng_2 = '9';
$entf = '40';
$pi = '3.14';
$A = '5.9';
...
    $sql_query = ("SELECT 
                              * 
                   FROM 
                              `database` 
                   WHERE 

// Hier in der WHERE-Klausel soll nun die Formelberechnung umgesetzt werden - ANFANG

(((acos(sin($lat_1)*sin($lat_2)+cos($lat_1)*cos($lat_2)*cos($lng_2-$lng_1)))180*$pi)*$A) <= $entf

// Formelberechnung - ENDE

                   ORDER BY
                              'point' ASC	
                   "); 
    $result = mysql_query($sql_query);
	while( $row = mysql_fetch_array($result,MYSQL_ASSOC) ) {
                     echo $row['point']."<br />";
}
...
MySQL soll also anhand dieser Formel die Ausgabe filtern, so dass MySQL die Rechenarbeit leistet und diese nicht über das PHP Script geleistet wird. Ich verspreche mir dadurch eine bessere Performance bei größeren Zugriffszahlen.

Vielleicht hat jemand eine zündende Idee für mich.


Beste Grüße,
preko
 
Hallo!

Keine zündene Idee..... aber den Hinweis dass es für die Variable $pi auch eine Funktion gibt. ;)

Gruss Dr Dau

[edit]
Eine Idee hätte ich doch.
Die Abfrage führt so zum gewünschten Ergebnis?
Dann würde ich mal gucken was passiert wenn Du die mathematischen PHP-Funktionen in der php.ini oder per ini_set() deaktivierst (Abschnitt: disable_functions).
Soweit ich weiss gibt es diese nämlich auch in MySQL.
Dann müssten sie für PHP eigentlich ein einfacher String sein und MySQL müsste sie als Fünktionen ansehen.
Keine Ahnung ob es funktioniert..... aber ein Versuch wäre es wert. ;)
[/edit]
 
Zuletzt bearbeitet:
Hi,

ich verstehe ehrlich gesagt das Problem gar nicht. Klar kann auch MySQL solche Berechnungen durchführen. Schau halt in den numerischen Funktionen nach.
Ich sehe in dieser Formel allerdings keinen einzigen Spaltennamen. Was soll MySQL da filtern? Du bekommst entweder alle Datensätze oder keinen...

LG
 
Hi,

@ kuddeldaddeldu:

sorry, mein Fehler - habe mein Denkmodell reinkopiert und nicht die Realsituation. :(

Hier nun die richtige Darstellung:
PHP:
/* 
Spalten in der MySQL Tabelle:
lat_2 | lng_2 | city
*/
 
$lat_1 = '5'; 
$lng_1 = '8'; 
$entf = '40'; 
$pi = '3.14'; 
$A = '5.9'; 
... 
    $sql_query = ("SELECT  
                              `lat_2`,
                              `lng_2`,
                              `city`,
                   FROM  
                              `database`  
                   WHERE  

// Hier in der WHERE-Klausel soll nun die Formelberechnung umgesetzt werden - ANFANG 

(((acos(sin($lat_1)*sin(lat_2)+cos($lat_1)*cos(lat_2)*cos(lng_2-$lng_1)))180*$pi)*$A) <= $entf 

// Formelberechnung - ENDE 

                   ORDER BY 
                              //Hier soll das Ergebnis aus der obigen Formel rein// ASC     
                   ");  
    $result = mysql_query($sql_query); 
    while( $row = mysql_fetch_array($result,MYSQL_ASSOC) ) { 
                     echo $row['point']."<br />"; 
} 
...

@Dr. Dau:

Die Abfrage führt so nicht zum gewünschten Ergebnis (ich vermute Du hinterfragst die Syntax). Ist nur ein Ausdruck dessen, was ich bezwecken möchte. Allerdings ist die Formel als solche korrekt - mit PHP funktioniert sie!

Ich möchte per MySQL alle Orte abrufen, die in einem bestimmten Radius um einen Ausgangspunkt liegen und dann eine Sortierung in aufsteigender Folge nach Entfernungskilometern realisieren.
Damit nun MySQL nicht die ganze Tabelle einliest (welche bei meinem Vorhaben ziemlich groß werden könnte), soll eine "Vorauswahl" der Datensätze getroffen werden, die dann weiter von PHP verarbeitet wird.

Lasse ich die Berechnung nicht durch MySQL abarbeiten, so muss ich erst PHP drüberjagen, damit ich eine Sortierung nach Entfernungskilometern realisieren kann, da die Daten in der Datenbank "nur" die Längen- und Breitengrade enthalten und daraus erst anhand der Formel oben die tatsächlichen Entfernungskilometer berechnet werden.

Übrigens arbeite ich mit einer ausführlicheren Zahl PI - habe es aus einfachheitsgründen abgekürzt. ;)


Beste Grüße,
preko
 
Zurück