phpbuddy.eu
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 23.07.2004, 20:06   #1
TP-Supporter
 
Registriert seit: Sep 2003
Ort: Wien, Österreich
GodfatherDeluxe macht sich hier sehr viel Mühe

mySQL mag mich mal wieder nicht...


Hallo Leute - wiedermal

Ich hab ein Formular (im Anhang zu sehen) mit dem ich eine Datenbank folgender Struktur durchsuchen möchte:

Tabelle Objekte:
id
preisklasse
region
typ
vermietung
schlafzimmer
badezimmer
zimmer
toiletten
garten
pool
flaeche
wohnflaeche
garage
referenznr
regdate

Tabelle description:
id
objekt_id
lang
name
con

und zwar mit folgendem code:
PHP-Code:
if (isset($_POST['search']))
{
    
$nw $_POST['nw'];
    
$no $_POST['no'];
    
$sw $_POST['sw'];
    
$so $_POST['so'];

    
$villa $_POST['villa'];
    
$finca $_POST['finca'];
    
$apartement $_POST['apartement'];
    
$haus $_POST['haus'];
    
$grundstueck $_POST['grundstueck'];
    
$gewerbeobjekt $_POST['gewerbeobjekt'];
    
$mietobjekt $_POST['mietobjekt'];

    
$preiskl_1 $_POST['preiskl_1'];
    
$preiskl_2 $_POST['preiskl_2'];
    
$preiskl_3 $_POST['preiskl_3'];
    
$preiskl_4 $_POST['preiskl_4'];
    
$preiskl_5 $_POST['preiskl_5'];

    
$sql "select o.preisklasse, o.region, o.typ, o.vermietung, o.schlafzimmer, o.badezimmer, o.zimmer, o.toiletten, o.garten, o.pool, o.flaeche, 
            o.wohnflaeche, o.garage, o.referenznr, o.regdate, d.name, d.con from objekte o, description d where o.id=d.objekt_id and d.lang='$lang'"
;

    if (
$nw == true)
    {
        
$sql .= " and o.region='nw'";

        if (
$no == true)
            
$sql .= " or o.region='no'";
        if (
$sw == true)
            
$sql .= " or o.region='sw'";
        if (
$so == true)
            
$sql .= " or o.region='so'";
        
    }
    elseif (
$no == true && $nw==false)
    {
        
$sql .= " and o.region='no'";
        if (
$sw == true)
            
$sql .= " or o.region='sw'";
        if (
$so == true)
            
$sql .= " or o.region='so'";
    }
    elseif (
$sw == true && $no == false && $nw == false)
    {
        
$sql .= " and o.region='sw'";
        if (
$so == true)
            
$sql .= "or o.region='so'";
    }
    elseif (
$so == true && $no == false && $nw == false && $sw == false)
    {
        
$sql .= " and o.region='so'";
    }


    if (
$villa == true)
    {
        
$sql .= " and o.typ='villa'";

        if (
$apartement == true)
            
$sql .= " or o.typ='apartement'";
        if (
$finca == true)
            
$sql .= " or o.typ='finca'";
        if (
$haus == true)
            
$sql .= " or o.typ='haus'";
        if (
$grundstueck == true)
            
$sql .= " or o.typ='grundstueck'";
        if (
$gewerbeobjekt == true)
            
$sql .= " or o.typ='gewerbeobjekt'";
    }
    elseif (
$finca == true)
    {
        
$sql .= " and o.typ='finca'";

        if (
$apartement == true)
            
$sql .= " or o.typ='apartement'";
        if (
$haus == true)
            
$sql .= " or o.typ='haus'";
        if (
$grundstueck == true)
            
$sql .= " or o.typ='grundstueck'";
        if (
$gewerbeobjekt == true)
            
$sql .= " or o.typ='gewerbeobjekt'";
    }
    elseif (
$apartement == true)
    {
        
$sql .= " and o.typ='apartement'";

        if (
$haus == true)
            
$sql .= " or o.typ='haus'";
        if (
$grundstueck == true)
            
$sql .= " or o.typ='grundstueck'";
        if (
$gewerbeobjekt == true)
            
$sql .= " or o.typ='gewerbeobjekt'";
    }
    elseif (
$haus == true)
    {
        
$sql .= " and o.typ='haus'";

        if (
$grundstueck == true)
            
$sql .= " or o.typ='grundstueck'";
        if (
$gewerbeobjekt == true)
            
$sql .= " or o.typ='gewerbeobjekt'";
    }
    elseif (
$grundstueck == true)
    {
        
$sql .= " and o.typ='apartement'";
        if (
$gewerbeobjekt == true)
            
$sql .= " or o.typ='gewerbeobjekt'";
    }
    elseif (
$gewerbeobjekt == true)
        
$sql .= " and o.typ='gewerbeobjekt'";

    if (
$preiskl_1 == true)
    {
        
$sql .= " and o.preisklasse='1'";
        if (
$preiskl_2 == true)
            
$sql .= " or o.preisklasse='2'";
        if (
$preiskl_3 == true)
            
$sql .= " or o.preisklasse='3'";
        if (
$preiskl_4 == true)
            
$sql .= " or o.preisklasse='4'";
        if (
$preiskl_5 == true)
            
$sql .= " or o.preisklasse='5'";
    }
    elseif (
$preiskl_2 == true)
    {
        
$sql .= " and o.preisklasse='2'";
        
        if (
$preiskl_3 == true)
            
$sql .= " or o.preisklasse='3'";
        if (
$preiskl_4 == true)
            
$sql .= " or o.preisklasse='4'";
        if (
$preiskl_5 == true)
            
$sql .= " or o.preisklasse='5'";
    }
    elseif (
$preiskl_3 == true)
    {
        
$sql .= " and o.preisklasse='3'";
        
        if (
$preiskl_4 == true)
            
$sql .= " or o.preisklasse='4'";
        if (
$preiskl_5 == true)
            
$sql .= " or o.preisklasse='5'";
    }
    elseif (
$preiskl_4 == true)
    {
        
$sql .= " and o.preisklasse='4'";
        
        if (
$preiskl_5 == true)
            
$sql .= " or o.preisklasse='5'";
    }
    elseif (
$preiskl_5 == true)
    {
        
$sql .= " and o.preisklasse='5'";
    }
if (
$mietobjekt == true)
    
$sql .= " and o.vermietung='1'";


//Database-Instanz erzeugen
$db = new Database('usr_web179_1');

$objects $db->db_select($sql);
$objects_num $db->db_num_rows($sql);

$template->assign('objects',$objects);
$template->assign('objects_num',$objects_num);
$template->assign('sql',$sql);

//end search 
Das ganze funktioniert auch, solange ich im Formular nur eine Checkbox auswähle...sonst aber nicht - wenn ich zB. alle auswähle erhalte ich 64 Suchergebnisse, obwohl nur 4 Objekte in der DB eingetragen sind.
Der generierte Query sieht dann zB. so aus:
Zitat:
select o.preisklasse, o.region, o.typ, o.vermietung, o.schlafzimmer, o.badezimmer, o.zimmer, o.toiletten, o.garten, o.pool, o.flaeche, o.wohnflaeche, o.garage, o.referenznr, o.regdate, d.name, d.con from objekte o, description d where o.id=d.objekt_id and d.lang='de' and o.region='nw' or o.region='no' or o.region='sw' or o.region='so' and o.typ='villa' or o.typ='apartement' or o.typ='finca' or o.typ='haus' or o.typ='grundstueck' or o.typ='gewerbeobjekt' and o.preisklasse='1' or o.preisklasse='2' or o.preisklasse='3' or o.preisklasse='4' or o.preisklasse='5' and o.vermietung='1'
Und ich hab eigentlich keinen Plan wieso mir SQL dann 64 Ergebnisse (alles 4x und in allen Sprachen) liefert...
Ich hoffe sehr dass ihr mir helfen könnt, bin nämlich nicht gerade (wie man sieht ) der SQL-Meister...
Danke schonmal im Voraus
GodfatherDeluxe
Miniaturansicht angehängter Grafiken
mysql-mag-mich-mal-wieder-formular.gif  
__________________
Java != JavaScript

"He who makes a beast of himself gets rid of the pain of being a man."
Dr. Johnson
GodfatherDeluxe ist offline   Mit Zitat antworten


Alt 24.07.2004, 00:32   #2
TP-Moderator
 
Benutzerbild von Adromir
 
Registriert seit: Jun 2004
Ort: Hannover
Adromir lebt für das TP und seine UserAdromir lebt für das TP und seine UserAdromir lebt für das TP und seine UserAdromir lebt für das TP und seine UserAdromir lebt für das TP und seine UserAdromir lebt für das TP und seine User
Das liegt eher daran, daß die IF-Abfragen nicht den gewünschten Effekt liefern.

Alle Avriabeln die im Script vorkommen, vergleichst du mit true, zB.
$preiskl_4 == true

Aber woher bekommt die Variable den Wert true?
Normalerweise wird true nur von einer Funktion gesetzt.
Kann mich jetzt aber auch irren, dann würde die Beduingung sofort erfüllt sein, sobald die Variable gesertzt wurde, und daß tust du am Anfang des Scriptes..
Adromir ist offline   Mit Zitat antworten
Alt 24.07.2004, 02:29   #3
TP-Supporter
 
Registriert seit: Sep 2003
Ort: Wien, Österreich
GodfatherDeluxe macht sich hier sehr viel Mühe
Naja, die If-Abfragen liefern ja eben schon den gewünschten Effekt - der Query der generiert wird sieht ja genauso aus wie ich mir das vorstelle - er liefert nur in den meisten Fällen nicht das gewünschte Ergebnis, also wenn ich eben zB. alle Checkboxen anklicke, wird mir folgender Query generiert:
Zitat:
select o.preisklasse, o.region, o.typ, o.vermietung, o.schlafzimmer, o.badezimmer, o.zimmer, o.toiletten, o.garten, o.pool, o.flaeche, o.wohnflaeche, o.garage, o.referenznr, o.regdate, d.name, d.con from objekte o, description d where o.id=d.objekt_id and d.lang='de' and o.region='nw' or o.region='no' or o.region='sw' or o.region='so' and o.typ='villa' or o.typ='apartement' or o.typ='finca' or o.typ='haus' or o.typ='grundstueck' or o.typ='gewerbeobjekt' and o.preisklasse='1' or o.preisklasse='2' or o.preisklasse='3' or o.preisklasse='4' or o.preisklasse='5' and o.vermietung='1'
Meinem Verständnis nach, sollte diese Abfrage ja alle Datensätze liefern auf die zB. d.lang='de' zutrifft - wieso bekomme ich dann auch die Datensätze für alle anderen Sprachen?!

oder ein andres Beispiel:
Diesmal hab ich alle Regionen ausgewählt und als Objekt-Typ 'Villa' und keine Preisklasse:
Zitat:
select o.preisklasse, o.region, o.typ, o.vermietung, o.schlafzimmer, o.badezimmer, o.zimmer, o.toiletten, o.garten, o.pool, o.flaeche, o.wohnflaeche, o.garage, o.referenznr, o.regdate, d.name, d.con from objekte o, description d where o.id=d.objekt_id and d.lang='de' and o.region='nw' or o.region='no' or o.region='sw' or o.region='so' and o.typ='villa'
Das sollte mir doch alle Datensätze liefern, bei denen die Sprache 'de', die Region entweder 'nw', 'no', 'so' oder 'sw' und der typ 'villa' ist, wobei die preisklassen unberücksichtigt bleiben - oder nicht?!
Dennoch bekomme ich 49 Ergebnisse (alle Sprachen und jeder Datensatz 4x)?!

P.S.: Habe bis jetzt immer Checkboxen mit true abgefragt und keine Probleme damit gehabt, nichtsdestotrotz habe ich mal $nw ausgegeben, wenn es ausgewählt wurde enthält es den wert 'on' ansonsten wird nix ausgegeben - Ich hab also jetzt auch die Überprüfung von 'true' auf 'on' geändert, was aber keinen Effekt hat...

Ich bin echt verzweifelt, wenn ich das nicht bis morgen hinkriege, muss ich das mit select-feldern realisieren (da das morgen fertig sein muss) und das wäre nicht grade die eleganteste Lösung (da man sich dann eben auch nicht seine Kriterien individuell zusammenstellen kann) - ich hoffe ihr versteht mein problem...
Ich bin für jede Hilfe dankbar und hoffe ihr könnt mir helfen
ein verzweifelter GodfatherDeluxe
__________________
Java != JavaScript

"He who makes a beast of himself gets rid of the pain of being a man."
Dr. Johnson
GodfatherDeluxe ist offline   Mit Zitat antworten
Alt 24.07.2004, 12:31   #4
TP-Moderator
 
Benutzerbild von Adromir
 
Registriert seit: Jun 2004
Ort: Hannover
Adromir lebt für das TP und seine UserAdromir lebt für das TP und seine UserAdromir lebt für das TP und seine UserAdromir lebt für das TP und seine UserAdromir lebt für das TP und seine UserAdromir lebt für das TP und seine User
Mmh. Vieleicht liegt es an der JOIN Verbindung in dem Query.
So ein ähnliches Problem hatte ich auch mal, das lag aber daran, daß die WHERE on ON Bedingungen nicht eindeutig genug waren..
Adromir ist offline   Mit Zitat antworten
Alt 24.07.2004, 15:42   #5
TP-Supporter
 
Registriert seit: Sep 2003
Ort: Wien, Österreich
GodfatherDeluxe macht sich hier sehr viel Mühe
Heureka

Du hattest recht, die vielen and und or's hat er nicht gepackt, ich hab das ganze jetzt mit Klammern verdeutlicht und es funktioniert perfekt Vielen vielen Dank für deine Hilfe!
-->erledigt
ein glücklicher GodfatherDeluxe
__________________
Java != JavaScript

"He who makes a beast of himself gets rid of the pain of being a man."
Dr. Johnson
GodfatherDeluxe ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
mySQL mag mich mal wieder nicht... mySQL mag mich mal wieder nicht...
« Probleme mit Apache 2 | ne frage »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Rechner startet nach ausmachen nicht wieder sofort Creeper Hardware 7 27.03.2004 19:19
Hoverprobleme mit Unterlinks, (mal wieder) . .HEUTE!!! mit OVERLIB :) Gutschy HTML Puristen 7 11.07.2003 16:19
Vormundschaftsgerichts Antrag asdfg Archiv 14 01.02.2003 17:18
wieder mal eine preisfrage priamos Archiv 5 22.10.2002 16:36


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:58 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67