tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
540
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Quests Sohn
    Quests Sohn Quests Sohn ist offline Mitglied Bronze
    Registriert seit
    Apr 2005
    Beiträge
    43
    Hallo,

    ich möchte eine Regional-Suche einsetzen und habe vier Tabellen,
    die berücksichtigt werden müssen:

    1. Der Nutzer (users):
    userid, zipid, zip, name, ...

    2. Die Nutzerstatistik (stats):
    userid, login, status, ...

    3. Die vom Nutzer gewählten Themen (usertopics):
    userid, topic

    4. Die Regionen (locations):
    zipid, zip, city, area, county, ...

    Ich möchte jeden Nutzer finden, der
    - einen aktiven Account hat (status = '1')
    - sich für ein vorgegebenes Thema interessiert (topic = 'xyz')
    - in einer vorgegebenen Region lebt (county = 'NRW')

    Muss ich jetzt wirklich eine Abfrage machen, in der alle Postleitzahlen
    der vorgegebenen Region mit

    PHP-Code:

    ... WHERE zip '12345' OR zip '12346' OR zip '12347' ... 
    einzeln aufgeführt werden? Das wäre ja ein unendlicher String.
    NRW (Nordrhein-Westfalen) hat z. B. über 800 Postleitzahlen.

    Denke ich hier zu kompliziert? Ich komme irgendwie nicht weiter.


    Danke!!


    Der fragliche Code bisher:


    PHP-Code:

    // 1. Alle Nutzer, die sich für das vorgegebene Thema interessieren:
    $sql_users "SELECT * FROM users usa INNER JOIN stats sta USING (userid) INNER JOIN usertopics uto USING (userid) WHERE uto.topicid = '" $topicid "' AND sta.status = '1'"
    $res_users = @mysql_query($sql_users); 
    $users = @mysql_fetch_array($res_users); 

    // 2. Alle Postleitzahlen in der vorgegebenen Region:
    $sql_zips "SELECT * FROM locations WHERE zipcounty = '" $zipcounty "'"
    $res_zips = @mysql_query($sql_zips); 
    $zips = @mysql_fetch_array($res_zips); 
     

  2. #2
    Avatar von hammet
    hammet hammet ist offline himekishi
    Registriert seit
    Aug 2006
    Ort
    Bayern
    Beiträge
    334
    Ich weiß nicht ob ich dein Problem richtig verstanden habe.

    Du hast einen Nutzer, dem eien zipid zugewiesen is. Diese zipid befindet sich in den locations. Und du willst jetzt alle Nutzer ermitteln, die (über die zipid) bei county z.B. NRW haben?
    Wieso willst du dann die zips per Hand in dein Statement einfügen? Selektiere doch einfahc per Subselect alle zips, die bei county den gewünschten Wert aufweisen.
     
    Handlanger des Dr. Ex1tus

    Ich kenne Matzes dunkles Geheimnis ! oO

    o
    L_/
    OL
    This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.

    Hallo Nuray!

  3. #3
    Avatar von Quests Sohn
    Quests Sohn Quests Sohn ist offline Mitglied Bronze
    Registriert seit
    Apr 2005
    Beiträge
    43
    hallo hammet,

    das hört sich gut an. Dummerweise bin ich kein Profi und muss mich mal
    umschauen, ob ich irgendwo eine Anleitung für Subselects finde.

    Ich denke, grundsätzlich könnte das funktionieren.
    Ich gehe mal auf die Suche ...


    Danke erstmal!
     

  4. #4
    Avatar von hammet
    hammet hammet ist offline himekishi
    Registriert seit
    Aug 2006
    Ort
    Bayern
    Beiträge
    334
    Also ein Subselect ist einfach ein Select, welches sich innerhalb eines anderen Statements befindet.
    Ein select liefert immer eine Ergebnistabelle zurück (unabhängig von der Anzahl der Zeilen). Mal ein einfaches Beispiel:

    Code :
    1
    2
    
     
    SELECT name, vorname FROM menschen WHERE wohnort_id IN (SELECT id FROM wohnorte WHERE land = 'Deutschland' )

    Du selektierst alle Menschen bei denen sich der Wohnort in der Ergebnistabelle des zweiten Selects befindet.

    Ich hoffe ich konnte das etwas verdeutlichen
     
    Handlanger des Dr. Ex1tus

    Ich kenne Matzes dunkles Geheimnis ! oO

    o
    L_/
    OL
    This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.

    Hallo Nuray!

  5. #5
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    So spontan und ohne jede Gewähr:

    PHP-Code:

    SELECT 
    FROM users usa INNER JOIN stats sta USING (useridINNER JOIN usertopics uto USING (useridWHERE uto.topicid '" . $topicid . "' AND sta.status '1' AND zip = (SELECT zzip FROM locations WHERE county 'NRW'
    Verbessert mich wenn ich mit der Vermutung falsch liege.


    EDIT: Ups, zu spät und scheinbar dann auch noch falsch !
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  6. #6
    Avatar von Quests Sohn
    Quests Sohn Quests Sohn ist offline Mitglied Bronze
    Registriert seit
    Apr 2005
    Beiträge
    43
    Danke, im Prinzip ist das die Lösung!


    Mein Problem ist jetzt nur, dass die Abfrage

    PHP-Code:

    $sql 
    "SELECT zip FROM locations WHERE zip IN (SELECT zip FROM locations WHERE county = 'Nordrhein-Westfalen')"
    $res mysql_query($sql); 
    $array mysql_fetch_array($res); 
    nur einen einzelnen Datensatz ausgibt. Das liegt sicher an fetch_array(), oder?!
    Aber wie kann ich ein einfaches Array bekommen, wie etwa

    Array {
    [0] 12345
    [1] 12350
    [2] 12355
    }

    ohne noch zusätzlich eine while()-Schleife einzusetzen?
     

Ähnliche Themen

  1. Postleitzahlen MySQL-Dump
    Von JohannesR im Forum Relationale Datenbanksysteme
    Antworten: 20
    Letzter Beitrag: 28.02.10, 23:29
  2. MySQL-Volltext-Suche sehr langsam mit joined Tabellen
    Von bekay im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 02.04.09, 16:43
  3. Zwei Bedingungen in Left Join Query über vier Tabellen
    Von gaengsterbruth im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 07.03.07, 10:42
  4. MySQL-Suche durch mehrere Tabellen abstrakt
    Von patator im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 03.03.07, 15:44
  5. [MySQL] Suche über mehrere Tabellen
    Von Axor im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 13.09.06, 12:02