tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
1062
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von preko
    preko preko ist offline Mitglied Brokat
    Registriert seit
    Jun 2004
    Ort
    Mönchengladbach
    Beiträge
    397
    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-Code:
    $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
     
    Wem das Wasser bis zum Hals steht, sollte den Kopf nicht hängen lassen.

    Was man heute Rap-Musik nennt, hieß früher Stottern und war heilbar...

    Es gibt zwei Wege im Leben - den schweren und den falschen!
    -----------------------------------------------------------------------------------------------------
    http://www.prenociste-mir.com
    -----------------------------------------------------------------------------------------------------

  2. #2
    Avatar von Dr Dau
    Dr Dau Dr Dau ist offline ich wisch hier durch
    Registriert seit
    Feb 2005
    Ort
    hinterm Mond gleich Links
    Beiträge
    6.160
    Blog-Einträge
    4
    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]
    Geändert von Dr Dau (15.07.09 um 19:09 Uhr)
     
    Schri-Schra-Schrödi *g*
    mehrspaltiges/zeiliges Seitenlayout mit DIV's und CSS
    Dinge, die mit Tabellen besser klappen als mit CSS
    Ausgabe von Datum/Zeit unabhängig von der Server Zeitzone [php]
    Meine Links zum Thema Linux (Last update: 29.10.2011)
    Kein Busen ist so flach wie das Niveau dieser Party!
    ----
    Alte Weisheit: wer uns in den Arsch kriecht wird beschissen!
    ----
    Ich habe 3 Kinder und kein Geld!
    Warum kann ich nicht keine Kinder haben und 3 Geld?! (Homer Jay Simpson)

  3. #3
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    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
     
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

  4. #4
    Avatar von preko
    preko preko ist offline Mitglied Brokat
    Registriert seit
    Jun 2004
    Ort
    Mönchengladbach
    Beiträge
    397
    Hi,

    @ kuddeldaddeldu:

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

    Hier nun die richtige Darstellung:
    PHP-Code:
    /* 
    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
     
    Wem das Wasser bis zum Hals steht, sollte den Kopf nicht hängen lassen.

    Was man heute Rap-Musik nennt, hieß früher Stottern und war heilbar...

    Es gibt zwei Wege im Leben - den schweren und den falschen!
    -----------------------------------------------------------------------------------------------------
    http://www.prenociste-mir.com
    -----------------------------------------------------------------------------------------------------

  5. #5
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    Zitat Zitat von preko Beitrag anzeigen
    Die Abfrage führt so nicht zum gewünschten Ergebnis
    Das ist ein wenig ungenau...
    Poste doch bitte mal die konkret abgesetzte Abfrage und zu welchem unerwarteten Ergebnis sie denn führt. Beispieldaten?

    LG
     
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

Ähnliche Themen

  1. Entfernung berechnen anhand der PLZ
    Von Sascha1976 im Forum Coders Talk
    Antworten: 32
    Letzter Beitrag: 05.08.10, 20:54
  2. Antworten: 1
    Letzter Beitrag: 01.12.07, 00:53
  3. mysql Lebensalter berechnen lassen ?
    Von Deletemaster im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 23.11.06, 19:50
  4. MySQL: Ausgabe von einer Tabelle anhand eines Spielplans
    Von Sebbel85 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 29.08.06, 19:06
  5. Kurs anhand von zwei Positionsangaben berechnen?
    Von bartman336 im Forum Coders Talk
    Antworten: 5
    Letzter Beitrag: 02.07.04, 22:52