1Danke
ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
556
556
EMPFEHLEN
-
Hallo Jungs,
ich hab schon fleissig gegoogelt und leider nichts gefunden.
Wie schreibt man diese Abfrage hier korrekt?
$sql = 'Select id, var1, var2 from tab';
$select = 'SELECT id FROM '.$sql.''; (hier ist irgendwo ein Fehler!)
Danke!luv4dagame
-
15.02.10 21:30 #2
- Registriert seit
- May 2007
- Ort
- Dresden (Sachsen)
- Beiträge
- 1.961
Ich mag:- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
-
Hi.
ok
. Mein Beispiel war wohl etwas zu einfach gewählt.
Also eigentlich habe ich eher so etwas hier
und hier versuche ich dann auszulesenPHP-Code:
function getUmkreis() {
$ortIDs = array();
$sql = 'SELECT id, plz, ort,
ACOS(SIN(RADIANS(geo_b)) * SIN(RADIANS(49.1096938300675))
+ COS(RADIANS(geo_b)) * COS(RADIANS(49.1096938300675)) * COS(RADIANS(geo_l)
- RADIANS(10.7289164659405))
) * 6380 AS distance
FROM plz
WHERE ACOS(
SIN(RADIANS(geo_b)) * SIN(RADIANS(49.1096938300675))
+ COS(RADIANS(geo_b)) * COS(RADIANS(49.1096938300675)) * COS(RADIANS(geo_l)
- RADIANS(10.7289164659405))
) * 6380 < 10
ORDER BY distance';
$select = 'SELECT id FROM '.$sql.''; /* (hier liegt, glaube ich, das Problem) */
$this->DB->query($select);
$i = 0;
while($this->DB->next_record()) {
$ortIDs[] = $this->DB->f("ortIDs");
}
return $ortIDs;
}
PHP-Code:
$myOrt = new stadt;
$myOrteIDs = array();
$myOrteIDs = $myStadt->getUmkreis();
echo sizeof($myOrteIDs);
echo "jetzt: ";
echo $myOrteIDs[$ii];
echo "<br>";
for ($ii=0; $ii<sizeof($myOrteIDs); $ii++ ) {
$ort = $myOrt->getOrtData($myOrteIDs[$ii]); /* (hier hab ich ein Problem mit dem mehrdimensionalen Array) */
?>
<option value="<?php echo $myOrt->plz ?>"><?php echo $myOrt->ort ?></option>
<?php } ?>Geändert von crunch (16.02.10 um 13:02 Uhr)
luv4dagame
-
16.02.10 13:38 #4
- Registriert seit
- May 2007
- Ort
- Dresden (Sachsen)
- Beiträge
- 1.961
Ich versteh nicht, warum du dort eine Unterabfrage brauchst. Frag doch die nötigen Datensätze direkt aus deiner großen Abfrage (die mit den Winkelfunktionen) ab und fertig ist das Ganze.
Ich mag:- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
-
ich möchte am ende nur die
IDs in meinem Array ($myOrteIDs) haben. Momentan habe ich ja einen Array mit allem drin.
In dem SELECT muss ich allerdings zumindest ACOS mit auslesen.
Es würde mir auch helfen, wenn ich entweder erst in #temp auslesen würde und dann aus #temp selecte. (weiß allerdings nicht wie das aussehen müsste)
ODER: wenn ich aus dem array anschliessend nur die IDs ansprechen könnte.
Ich hoffe das Problem ist jetzt deutlicher.
Gruß,
Dominikluv4dagame
-
16.02.10 14:03 #6
- Registriert seit
- May 2007
- Ort
- Dresden (Sachsen)
- Beiträge
- 1.961
Ich versteh dich immer noch nicht ganz. Am besten sagst du uns einfach, was du am Ende in dem Array für Werte haben willst und dann basteln wir gemeinsam die Abfrage so zusammen, wie du sie brauchst.
Ich mag:- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
-
Ich hinterfrage jetzt nicht, sondern sage dir wo eine Problem liegen könnte.
müsste her so aussehenPHP-Code:$select = 'SELECT id FROM '.$sql.''; /* (hier liegt, glaube ich, das Problem) */
Wobei du so nur die ID hast, Den Ort, Distanz etc. verlierst du.PHP-Code:$select = 'SELECT id FROM ('.$sql.') AS sub'; /* (hier liegt, glaube ich, das Problem) */
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
ok
dann fange ich am besten noch einmal ganz vorne an.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
CREATE TABLE `plz` ( `id` int(10) NOT NULL auto_increment, `land` varchar(5) NOT NULL default '', `bundesland` varchar(50) NOT NULL default '', `bezirk` varchar(50) NOT NULL default '', `kreis` varchar(50) NOT NULL default '', `frei` varchar(50) NOT NULL default '', `ort` varchar(50) NOT NULL default '', `geo_l` double NOT NULL default '0', `geo_b` double NOT NULL default '0', `plz` varchar(6) NOT NULL default '', `bland` varchar(5) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=13348 ; -- -- Daten für Tabelle `plz` -- INSERT INTO `plz` (`id`, `land`, `bundesland`, `bezirk`, `kreis`, `frei`, `ort`, `geo_l`, `geo_b`, `plz`, `bland`) VALUES (5078, 'DE', 'Sachsen', 'Dresden', 'Kreisfreie Stadt Dresden', '-', 'Dresden', 13.7210676148814, 51.0600336463379, '01067', 'S') ... ...
Das ist meine Tabelle "plz".
Aus dieser Tabelle möchte ich nun die Städte auslesen, die in 10 Kilometer Umkreis von Gunzenhausen liegen:
(1) Ich brauche die Geodaten von Gunzenhausen
(2) Mit Hilfe der Geodaten von Gunzenhausen und meiner Funktion "Umkreissuche" aus der Klasse "Stadt" suche ich nun alle Städte in 10 Kilometer Umkreis:PHP-Code:$sql = 'SELECT * FROM `plz` WHERE `ort` LIKE \'Gunzenhausen%\' LIMIT 1 ';
Wie man sieht, gibt die Funktion Umkreissuche $ortIDs zurück. PROBLEM: da stehe jetzt nicht nur die IDs drin, sondern auch "plz", "ort" und "distance". "plz" und "ort" brauche ich eigentlich in dem SELECT nicht. "distance" hingegen schon.PHP-Code:function getUmkreis() {
$ortIDs = array();
$select = 'SELECT id, plz, ort,
ACOS(SIN(RADIANS(geo_b)) * SIN(RADIANS(49.1096938300675))
+ COS(RADIANS(geo_b)) * COS(RADIANS(49.1096938300675)) * COS(RADIANS(geo_l)
- RADIANS(10.7289164659405))
) * 6380 AS distance
FROM plz
WHERE ACOS(
SIN(RADIANS(geo_b)) * SIN(RADIANS(49.1096938300675))
+ COS(RADIANS(geo_b)) * COS(RADIANS(49.1096938300675)) * COS(RADIANS(geo_l)
- RADIANS(10.7289164659405))
) * 6380 < 10
ORDER BY distance';
$this->DB->query($select);
$i = 0;
while($this->DB->next_record()) {
$ortIDs[] = $this->DB->f("ortIDs");
}
return $ortIDs;
}
Deshalb wollte ich anschliessend noch einmal NUR alle IDs selektieren, damit ich dann hier mit dem array($myOrteIDs) weiterarbeiten kann.
Mit der Funktion "getOrtData" aus der Klasse "stadt" könnte ich mir dann wieder mit Hilfe der ID die nötigen Infos (plz, ort, ...) auslesen.PHP-Code:<?php
$myOrt = new stadt;
$myOrteIDs = array();
$myOrteIDs = $myStadt->getUmkreis();
echo sizeof($myOrteIDs);
echo "jetzt: ";
echo $myOrteIDs[$ii];
echo "<br>";
for ($ii=0; $ii<sizeof($myOrteIDs); $ii++ ) {
$ort = $myOrt->getOrtData($myOrteIDs[$ii]);
?>
<option value="<?php echo $myOrt->plz ?>"><?php echo $myOrt->ort ?></option>
<?php } ?>
Das war jetzt bestimmt wieder viel zu kompliziert. Also die Frage nochmal auf einem Punkt gebracht:
Wie kann ich es erreichen, dass in dem Array $myOrteIDs am Ende nur die IDs stehen und nicht "distance"?
War das jetzt klarer?
Sorry... hab vielleicht einfach schon zu viel Stunden davor gesessen
.
luv4dagame
-
Sorry yaslaw. hab deinen Eintrag gerade erst gesehen.
Bekomme leider auch damit eine Fehlermeldung:
Database error: Invalid SQL: SELECT id FROM (SELECT id, plz, ort, ACOS(SIN(RADIANS(geo_b)) * SIN(RADIANS(49.1096938300675)) + COS(RADIANS(geo_b)) * COS(RADIANS(49.1096938300675)) * COS(RADIANS(geo_l) - RADIANS(10.7289164659405)) ) * 6380 AS distance FROM plz WHERE ACOS( SIN(RADIANS(geo_b)) * SIN(RADIANS(49.1096938300675)) + COS(RADIANS(geo_b)) * COS(RADIANS(49.1096938300675)) * COS(RADIANS(geo_l) - RADIANS(10.7289164659405)) ) * 6380 < 10 ORDER BY distance) AS sub
MySQL Error: 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT id, plz, ort, ACOS(SIN(RADIANS(geo_b)) * SIN(RADIANS(4)
Session halted.luv4dagame
-
- Du kannst die distance drin lassen und einfach ignorieren
- du kannst die Berechung auch in den ORDER BY tun und im SELECT_Teil ignorieren
- Du kannst es wie von dir geplant mit einer Unterabfrage lösen (ist am schönsten, da die Berechnung nur einmal ausgeführt wird.
In deiner Berechnung sehe ich nirgens die Koordinaten von Gunzenhausen um die Distanz zu rechnen......
Ich habe mal die Berechnung rausgenommen. Zudem grenze ich schon sehr früh ein Quadrat um Gunzenhausen (+-10) ein, damit nicht alle Daten von ganz Deutschland berechnet werden müssen
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
SELECT calc.id FROM (SELECT id /* Berechnung der genauen Distanz mit pb, pl, zb, zl*/ AS distance FROM (SELECT plz.geo_b AS pb, plz.geo_l AS pl, zentrum.geo_b AS zb, zentrum.geo_l AS zl, FROM plz (SELECT geo_b, geo_l FROM plz WHERE ort LIKE 'Gunzenhausen%') AS zentrum WHERE plz.geo_b BETWEEN zentrum.geo_b + 10 AND zentrum.geo_b +10 ) AS calc WHERE calc.distance < 10 ORDER BY calc.distance
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Danke Yaslaw,
das ist ziemlich genau was ich gesucht habe... sorry für die komplizierte Ausdrucksweise!
thx!luv4dagame
Ähnliche Themen
-
Ausblenden von Spalten in einer SELECT-Abfrage trotz "SELECT *"
Von Greq im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 19.11.07, 23:29 -
select-box1 ändern -> select-box2 nimmt selben wert na
Von The_MACman im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 15.06.06, 00:34 -
Select Inhalt und Sichtbarkeit abhängig von vorhergehendem Select
Von LongDonJohn im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 07.04.06, 12:01 -
Nach select neues select per mysql eingrenzen
Von CrushLog im Forum PHPAntworten: 8Letzter Beitrag: 18.05.05, 15:43 -
neues Select nach select aus mysql
Von mrbong im Forum PHPAntworten: 15Letzter Beitrag: 14.10.04, 00:05





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren