ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
540
540
EMPFEHLEN
-
30.04.09 13:18 #1
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
einzeln aufgeführt werden? Das wäre ja ein unendlicher String.PHP-Code:
... WHERE zip = '12345' OR zip = '12346' OR zip = '12347' ...
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);
-
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!
-
30.04.09 13:49 #3
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!
-
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!
-
30.04.09 14:03 #5
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
So spontan und ohne jede Gewähr:
Verbessert mich wenn ich mit der Vermutung falsch liege.PHP-Code:
SELECT * FROM users usa INNER JOIN stats sta USING (userid) INNER JOIN usertopics uto USING (userid) WHERE uto.topicid = '" . $topicid . "' AND sta.status = '1' AND zip = (SELECT zzip FROM locations WHERE county = 'NRW')
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.
-
01.05.09 11:59 #6
Danke, im Prinzip ist das die Lösung!
Mein Problem ist jetzt nur, dass die Abfrage
nur einen einzelnen Datensatz ausgibt. Das liegt sicher an fetch_array(), oder?!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);
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
-
Postleitzahlen MySQL-Dump
Von JohannesR im Forum Relationale DatenbanksystemeAntworten: 20Letzter Beitrag: 28.02.10, 23:29 -
MySQL-Volltext-Suche sehr langsam mit joined Tabellen
Von bekay im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 02.04.09, 16:43 -
Zwei Bedingungen in Left Join Query über vier Tabellen
Von gaengsterbruth im Forum Relationale DatenbanksystemeAntworten: 8Letzter Beitrag: 07.03.07, 10:42 -
MySQL-Suche durch mehrere Tabellen abstrakt
Von patator im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 03.03.07, 15:44 -
[MySQL] Suche über mehrere Tabellen
Von Axor im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 13.09.06, 12:02





Zitieren

Login





