tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von einfach nur crack
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
556
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    crunch crunch ist offline Mitglied Silber
    Registriert seit
    May 2002
    Ort
    Paderborn (NRW)
    Beiträge
    74
    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

  2. #2
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Angesichts der Tatsache, dass ich bei dieser Abfrage keinen Grund für eine Unterabfrage sehe, könntest du das Problem so lösen:
    Code MySQL:
    1
    
    SELECT `id` FROM `tab`
    crunch bedankt sich. 
    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.

  3. #3
    crunch crunch ist offline Mitglied Silber
    Registriert seit
    May 2002
    Ort
    Paderborn (NRW)
    Beiträge
    74
    Hi.

    ok . Mein Beispiel war wohl etwas zu einfach gewählt.

    Also eigentlich habe ich eher so etwas hier

    PHP-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;
        } 
    und hier versuche ich dann auszulesen

    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

  4. #4
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    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.

  5. #5
    crunch crunch ist offline Mitglied Silber
    Registriert seit
    May 2002
    Ort
    Paderborn (NRW)
    Beiträge
    74
    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ß,
    Dominik
     
    luv4dagame

  6. #6
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    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.

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Ich hinterfrage jetzt nicht, sondern sage dir wo eine Problem liegen könnte.

    PHP-Code:
    $select 'SELECT id FROM '.$sql.''/* (hier liegt, glaube ich, das Problem) */ 
    müsste her so aussehen
    PHP-Code:
    $select 'SELECT id FROM ('.$sql.') AS sub'/* (hier liegt, glaube ich, das Problem) */ 
    Wobei du so nur die ID hast, Den Ort, Distanz etc. verlierst du.
     
    ---------------------------------------------------------------------------------------------------
    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

  8. #8
    crunch crunch ist offline Mitglied Silber
    Registriert seit
    May 2002
    Ort
    Paderborn (NRW)
    Beiträge
    74
    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

    PHP-Code:
    $sql 'SELECT * FROM `plz` WHERE `ort` LIKE \'Gunzenhausen%\' LIMIT 1 '
    (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:
        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;
        } 
    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.

    Deshalb wollte ich anschliessend noch einmal NUR alle IDs selektieren, damit ich dann hier mit dem array($myOrteIDs) weiterarbeiten kann.

    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 ?>
    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.

    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

  9. #9
    crunch crunch ist offline Mitglied Silber
    Registriert seit
    May 2002
    Ort
    Paderborn (NRW)
    Beiträge
    74
    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

  10. #10
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    - 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

  11. #11
    crunch crunch ist offline Mitglied Silber
    Registriert seit
    May 2002
    Ort
    Paderborn (NRW)
    Beiträge
    74
    Danke Yaslaw,

    das ist ziemlich genau was ich gesucht habe... sorry für die komplizierte Ausdrucksweise!

    thx!
     
    luv4dagame

Ähnliche Themen

  1. Ausblenden von Spalten in einer SELECT-Abfrage trotz "SELECT *"
    Von Greq im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 19.11.07, 23:29
  2. select-box1 ändern -> select-box2 nimmt selben wert na
    Von The_MACman im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 15.06.06, 00:34
  3. Select Inhalt und Sichtbarkeit abhängig von vorhergehendem Select
    Von LongDonJohn im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 07.04.06, 12:01
  4. Antworten: 8
    Letzter Beitrag: 18.05.05, 15:43
  5. neues Select nach select aus mysql
    Von mrbong im Forum PHP
    Antworten: 15
    Letzter Beitrag: 14.10.04, 00:05