php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen
Alt 20.03.2009, 22:28  
Neuer Benutzer
 
Registriert seit: 06.01.2009
Beiträge: 25
wepse befindet sich auf einem aufstrebenden Ast
Standard Abfrage erstellen

Hi, ich kenne mich noch nicht sehr gut aus mir sql. Daher meine Frage.
Ich will eine Abfrage erstellen in der auch gleichzeitig eine Berechnung durchgeführt wird.

Ich habe in meiner Datenank verschiedene koordinaten gespeichert (99x99). Nun habe ich ein formular wo ich den ausgangswert und die maximale entfernung eingebe.
Die Entfernung berechne ich bisher mit php jedoch wollte ich die berechnung ganz gerne über sql machen.

In php sieht die Berechnung im moment so aus

PHP-Code:
function entfernung($start1$start2$ziel1$ziel2) {
    
$a $start1 $ziel1;
    if(
$start<0) {
        
$start $start * -1;
    }
    
$b $start2 $ziel2;
    if(
$ziel<0) {
        
$ziel $ziel * -1;
    }
    
$a $a $a;
    
$b $b $b;
    
$entfernung =  $a $b;
    
$entfernung sqrt($entfernung);
    
$entfernung round($entfernung 2);
    return 
$entfernung;

Kann mir jemand behinflich sein das in sql umzusetzen?
wepse ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.03.2009, 22:35  
Forenpolitikum
 
Registriert seit: 21.05.2008
Beiträge: 45.960
PHP-Kenntnisse:
Fortgeschritten
nikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehen
Standard

Klar. Den ersten Versuch solltest allerdings Du unternehmen.

Tipp: Fass die Formel zusammen, math. Funktion bietet SQL ja.

c = wurzel aus a quadrat + b quadrat.

Mit stored procedures könntest Du sogar eine ähnliche Funktion wie oben definieren. Wobei die -1 Tests eher in den WHERE Clause gehören.
__________________
--
^^ O.O
„Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


--
nikosch ist offline   Mit Zitat antworten
Alt 20.03.2009, 23:42  
Neuer Benutzer
 
Registriert seit: 06.01.2009
Beiträge: 25
wepse befindet sich auf einem aufstrebenden Ast
Standard

Also hier mal mein erster Versuch.

PHP-Code:


SELECT s
.allianzs.names.zusatzs.punktes.p_flottep.coords_sysxp.coords_sysyp.coords_planetSqr(
66 p.coords_sysx ) * ( 66 p.coords_sysx ) + ( 62 p.coords_sysy ) * ( 62 p.coords_sysy )
) AS 
Entfernung
FROM w3_spieler s
LEFT JOIN w3_planeten p ON s
.pk p.spieler_pk
ORDER BY s
.name ASC
LIMIT 0 
50 
Haut leider nicht hin.
wepse ist offline   Mit Zitat antworten
Alt 20.03.2009, 23:50  
Forenpolitikum
 
Registriert seit: 21.05.2008
Beiträge: 45.960
PHP-Kenntnisse:
Fortgeschritten
nikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehen
Standard

„Haut leider nicht hin....“ ist keine sinnvolle Fehlerbeschreibung
__________________
--
^^ O.O
„Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


--
nikosch ist offline   Mit Zitat antworten
Alt 20.03.2009, 23:56  
Neuer Benutzer
 
Registriert seit: 06.01.2009
Beiträge: 25
wepse befindet sich auf einem aufstrebenden Ast
Standard

Ok habs nun doch hinbekommen
Ich hatte bei SQRT nur das T vergessen ^^

PHP-Code:
    $query sprintf("SELECT s.allianz, s.name, s.zusatz, s.punkte, s.p_flotte, p.coords_sysx, p.coords_sysy, p.coords_planet,
ROUND(SQRT((" 
$_POST['x'] . " - p.coords_sysx) * (" $_POST['x'] . " - p.coords_sysx) + (" $_POST['y'] . " - p.coords_sysy) * (" $_POST['y'] . " - p.coords_sysy)), 2) AS Entfernung
                     FROM w3_spieler s
                     LEFT JOIN w3_planeten p ON s.pk=p.spieler_pk
                      %s %s
                      ORDER BY %s %s
                      LIMIT %s , %s"
,
             
$where,
             
implode(" AND "$sop),
             
$_SESSION["sort_op"],
             
$_SESSION["richtung"],
             
$start,
             
$_SESSION["proseite"]); 
Muss ich zwar noch nen bischen was dran ändern aber das wichtigste ist denk ich geschafft.

Geändert von wepse (21.03.2009 um 00:00 Uhr).
wepse ist offline   Mit Zitat antworten
Alt 21.03.2009, 00:09  
Forenpolitikum
 
Registriert seit: 21.05.2008
Beiträge: 45.960
PHP-Kenntnisse:
Fortgeschritten
nikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehen
Standard

Glückwunsch! Das sind mir immer die liebsten Boarduser.

PS: Falls Dir das mal hilft: es gibt auch Variablen in SQL.
__________________
--
^^ O.O
„Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


--

Geändert von nikosch (21.03.2009 um 00:57 Uhr).
nikosch ist offline   Mit Zitat antworten
Alt 21.03.2009, 00:54  
Neuer Benutzer
 
Registriert seit: 06.01.2009
Beiträge: 25
wepse befindet sich auf einem aufstrebenden Ast
Standard

So hier jetzt mal mein fertiges ergebnis.

Code:
SELECT s.allianz, s.name, s.zusatz, s.punkte, s.p_flotte, p.coords_sysx, p.coords_sysy, p.coords_planet, 
ROUND(SQRT((66 - p.coords_sysx) * (66 - p.coords_sysx) + (62 - p.coords_sysy) * (62 - p.coords_sysy)), 2) AS Entfernung FROM w3_spieler s
LEFT JOIN w3_planeten p ON s.pk=p.spieler_pk
WHERE ROUND( SQRT( IF((66- p.coords_sysx ) * ( 66 - p.coords_sysx )<0,( 66 - p.coords_sysx ) * ( 66 - p.coords_sysx )*-1,( 66 - p.coords_sysx ) * ( 66 - p.coords_sysx )) + IF(( 62 - p.coords_sysy ) * ( 62 - p.coords_sysy )<0,( 62 - p.coords_sysy ) * ( 62 - p.coords_sysy )*-1,( 62 - p.coords_sysy ) * ( 62 - p.coords_sysy )) ) , 2 ) < '10'
ORDER BY s.name ASC
LIMIT 0 , 50
PHP-Code:
    $query sprintf("SELECT s.allianz, s.name, s.zusatz, s.punkte, s.p_flotte, p.coords_sysx, p.coords_sysy, p.coords_planet,
                      ROUND(SQRT((%s - p.coords_sysx) * (%s - p.coords_sysx) + (%s - p.coords_sysy) * (%s - p.coords_sysy)), 2) AS
                      Entfernung
                      FROM w3_spieler s
                      LEFT JOIN w3_planeten p ON s.pk=p.spieler_pk
                      %s %s
                      ORDER BY %s %s
                      LIMIT %s , %s"
,
             
$_POST['x'],
             
$_POST['x'],
             
$_POST['y'],
             
$_POST['y'],
             
$where,
             
implode(" AND "$sop),
             
$_SESSION["sort_op"],
             
$_SESSION["richtung"],
             
$start,
             
$_SESSION["proseite"]); 
Kann ich daran noch etwas verbessern?
wepse ist offline   Mit Zitat antworten
Alt 21.03.2009, 01:01  
Forenpolitikum
 
Registriert seit: 21.05.2008
Beiträge: 45.960
PHP-Kenntnisse:
Fortgeschritten
nikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehen
Standard

- %d statt %s.

Ist das eigentlich ein Spiel? Je nach Performance der akt. Berechnung und Anspruch könnte man dann auch die Entfernungen pseudoberechnen (Näherungswert, so eine Art Rasterentfernung: x+y-Korrekturwert).
__________________
--
^^ O.O
„Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


--
nikosch ist offline   Mit Zitat antworten
Alt 21.03.2009, 01:13  
Neuer Benutzer
 
Registriert seit: 06.01.2009
Beiträge: 25
wepse befindet sich auf einem aufstrebenden Ast
Standard

Ok danke hab ich jetzt getauscht.

Es ist nicht direkt ein Spiel, es ist mehr eine Datenbank die als Hilfe dienen soll. In der Datenbank stehen nur informationen zu Spielern und deren Planeten, wo sie sind viele Punkte usw. Mit dieser Funktion will ich die Entfernung zu anderen Spielern anzeigen lassen.
Kann dir da grad nicht folgen. Was meinst du mit pseudoberechnen?
wepse ist offline   Mit Zitat antworten
Alt 21.03.2009, 03:37  
Forenpolitikum
 
Registriert seit: 21.05.2008
Beiträge: 45.960
PHP-Kenntnisse:
Fortgeschritten
nikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehennikosch genießt hohes Ansehen
Standard

Ah ok, dann ist das vielleicht zu vernachlässigen. Ich könnte mit vorstellen, in einem Browsergame mit vielen Requests könnte der Pythagoras zum Flaschenhals werden. Dann hätte man vielleicht über die Summe von X- und Y-Verschiebung und eine Korrektur eine Art Näherungswert statt der teuren Wurzeloperation berechnen können. War nur so eine Idee.

Alternativ könnte man in so einem überschaubaren Raster ja auch die Werte vorherberechnen. Sind ja nicht so viele, wenn man die absoluten Werte für X und Y betrachtet, die vorkommen können. Ich glaube 4900.
__________________
--
^^ O.O
„Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


--

Geändert von nikosch (21.03.2009 um 03:42 Uhr).
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage von einer Abfrage Datenbanken 5 27.01.2011 23:31
Problem mit Abfrage - join, inner join, distinct? Gachet01 Datenbanken 2 27.01.2011 06:49
abfrage erstellen so das z.b jquerry.js nur einmal geladen wird? hups JavaScript, Ajax und mehr 2 20.03.2009 13:10
Suchformular --> Abfrage erstellen wepse PHP Tipps 2009 3 18.03.2009 23:47
SQL Abfrage ohne DESC langsam Thisi Datenbanken 5 07.01.2009 09:53
Wiemache ich eine Abfrage über 3 Tabellen??? djscaleo Datenbanken 8 05.01.2009 10:46
MySQL - Fehler in einfacher Abfrage oden Datenbanken 11 03.01.2009 20:03
Problem eine Abfrage zu erstellen FireFIghter Datenbanken 6 01.08.2006 08:39
mit Enter Abfrage erstellen? Anuschka PHP Tipps 2005-2 1 23.10.2005 03:03
[Erledigt] mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
Stammbaum erstellen Riot PHP Tipps 2005 17 13.05.2005 16:32
[Erledigt] IF() abfrage in variable packen PHP Tipps 2005 14 01.04.2005 17:23
Abfrage von Char-Feldern Datenbanken 9 04.02.2005 14:06
Mysql Abfrage Problem! PHP-Fortgeschrittene 5 27.11.2004 10:22
Abfrage aus DB noch mal ausgeben und Abfrage aus mehrern Tab PHP Tipps 2004 4 12.07.2004 15:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
quatradzahlen, quadratzahlen abfragen, quadratzahlen bis 25 abfrage, quadratzahlen abfrage, quadratzahlen bis 20 abfrager, quadratzahlen abfragen im internet, quadratzahlen bis 25 abfragen, suchformular erstellen php, abfragen von quadratzahlen, abfrager quadratzahlen, quadratzahlen bis 20 abfragung, quadratzahlen von 1-20 abfragung, abfrage erstellen php, quadratzahlen bis 20 abfragen lassen online, quadratzahlen bis 25 abfragen online, wurzelzahlen 1-25, online abfrage quadratzahlen 1-25, quatradzahl von 11, wurzelzahlen 1-25 abfragen, quatradzahlen 1-20

Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum