Mysql Abfrage!!!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mysql Abfrage!!!

    hi habe da einen fehler und komm nicht drauf, kurz um was es geht.
    es soll in der 1. Abfrage die Suchdaten vom User abgefragt werden in der 2. abfrage soll dann verglichen werden welche Immobilien den suchdaten entsprechen und ausgegeben werden hier mal der
    code vielleicht kann mir wer helfen

    danke
    PHP-Code:

    <? 

    function ausgabe($username)
        {
        $query="select * from kunden where (username LIKE '".$username."')";
        $ergebnis=mysql_query($query);
        $row = mysql_fetch_array($ergebnis); 

                    {
                    $typ = $row['s_typ'];
        $preis = $row['s_preis'];
        $art = $row['s_art'];
        $bundesland = $row['s_bundesland'];
        $ort = $row['s_ort'];
        $plz = $row ['s_plz'];
        $wohnflaeche = $row['s_wohnflaeche'];
        $grundflaeche = $row['s_grundflaeche'];
                    }
        
        $search = mysql_query("SELECT * FROM immobilien WHERE (typ LIKE '".$typ."') AND (preis >= '".$preis."') AND (art LIKE '".$art."') AND (bundesland LIKE '%".$bundesland."%') AND (ort LIKE '%".$ort."%') AND (plz LIKE '%".$plz."%') AND (wohnflaeche <= '".$wohnflaeche."') OR (grundflaeche <= '".$grundflaeche."') ORDER BY id"); 
        while ($data = mysql_fetch_array($search))  

        {
                    
        echo ' 
        
        <table width="350" border="0" cellspacing="2" cellpadding="0">
        <tr bgcolor="', $bgcolor, '">
            <td>
                <table border="0" cellpadding="0">
                    <tr>
                        <td valign="top">
                            <div align="left">
                                <span class="text_1"><b>passende Objekte </b></span></div>
                        </td>
                        <td valign="top" width="176">
                            <div align="left">
                                <span class="text_1">'.$data[name].'</span></div>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
        </table>';
        }
        }
    ?>
    <br><br><?php ausgabe($username); ?>

  • #2
    ich bins nochmal falls wer eine lösung hat bitte an churcher@gmx.de nur eine kurze mail schicken damit ich bescheid weiß danke

    Kommentar


    • #3
      ich würde mal sagen, dass das im sql-forum besser aufgehoben wäre ...

      aber nun zu deinem problem.

      welchen zweck erfüllen deiner meinung nach die beiden kommata?
      Code:
      <tr bgcolor="', $bgcolor, '">
      das müsste doch eher punkte sein.

      desweiteren konnte ich nicht unbedingt nachvollziehen, wie die beiden abfragen in verbindung stehen sollen? kann man es auch in einer abfrage machen? z.b. mit JOIN. wie stehen die daten zueinander im verhältnis.

      warum verwendest du eigentlich immer LIKE '%....%' bei deinen abfragen?

      was das melden via mail angeht, so kann man hier im forum auch einen hacken setzen, dass man via mail informiert wird, wenn auf einen post geantwortet wurde. dies solltest du dir mal einstellen!
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Hi!

        Erstmals danke für deine Antwort.

        Das mit den Bgcouler dürfte sich beim kpieren eingeschlichen haben ;-(

        Was würdest du anstelle von LIKE nehmen???

        Hier du Auflistung der Datenbank Struktur:

        CREATE TABLE immobilien (
        id int(6) NOT NULL auto_increment,
        nr varchar(6) NOT NULL default '',
        name varchar(50) NOT NULL default '',
        art enum('kaufen','mieten') NOT NULL default 'kaufen',
        typ enum('Haus','Wohnung','Grundstück') NOT NULL default 'Haus',
        bundesland enum('Wien','Niederösterreich','Oberösterreich','Burgenland','Kärnten','Steiermark','Tirol','Vorarlb erg','Salzburg') NOT NULL default 'Wien',
        lage text NOT NULL,
        standort text NOT NULL,
        strasse varchar(250) default NULL,
        plz varchar(4) default NULL,
        ort varchar(70) default NULL,
        wohnflaeche varchar(5) default NULL,
        grundflaeche varchar(5) default NULL,
        zimmer tinyint(2) default NULL,
        baujahr varchar(4) default NULL,
        provision text,
        bezugsfrei varchar(250) default NULL,
        nebenkosten varchar(15) default NULL,
        preis varchar(10) default NULL,
        beschreibung text,
        sonstiges text,
        ausstattung text,
        bild_1 varchar(100) NOT NULL default 'blind.gif',
        bild_2 varchar(100) NOT NULL default 'blind.gif',
        bild_3 varchar(100) NOT NULL default 'blind.gif',
        text_bild1 varchar(250) default NULL,
        text_bild2 varchar(250) default NULL,
        text_bild3 varchar(250) default NULL,
        plan_1 varchar(100) NOT NULL default 'blind.gif',
        plan_2 varchar(100) NOT NULL default 'blind.gif',
        plan_3 varchar(100) NOT NULL default 'blind.gif',
        text_plan1 varchar(250) default NULL,
        text_plan2 varchar(250) default NULL,
        text_plan3 varchar(250) default NULL,
        PRIMARY KEY (id)
        ) TYPE=MyISAM;
        # --------------------------------------------------------

        #
        # Tabellenstruktur für Tabelle `kunden`
        #

        CREATE TABLE kunden (
        id mediumint(6) NOT NULL auto_increment,
        nr varchar(6) NOT NULL default '',
        username varchar(50) default NULL,
        password varchar(30) default NULL,
        vorname varchar(50) NOT NULL default '',
        name varchar(50) NOT NULL default '',
        anrede enum('Herr','Frau') default NULL,
        email varchar(50) NOT NULL default '',
        tel varchar(20) NOT NULL default '',
        fax varchar(20) default NULL,
        adresse varchar(100) NOT NULL default '',
        plz varchar(4) NOT NULL default '0',
        ort varchar(50) NOT NULL default '',
        bundesland enum('Wien','Niederösterreich','Oberösterreich','Burgenland','Kärnten','Steiermark','Tirol','Vorarlb erg','Salzburg') default NULL,
        s_typ enum('Haus','Wohnung','Grundstück') NOT NULL default 'Haus',
        s_wohnflaeche varchar(5) default '0',
        s_grundflaeche varchar(8) default NULL,
        s_preis varchar(10) default NULL,
        s_art enum('kaufen','mieten') NOT NULL default 'kaufen',
        s_bundesland enum('Wien','Niederösterreich','Oberösterreich','Burgenland','Kärnten','Steiermark','Tirol','Vorarlb erg','Salzburg') NOT NULL default 'Wien',
        s_ort varchar(100) default NULL,
        s_plz varchar(4) default NULL,
        eintrag_datum date NOT NULL default '0000-00-00',
        eintrag_dauer tinyint(2) NOT NULL default '0',
        PRIMARY KEY (id),
        UNIQUE KEY username (username)
        ) TYPE=MyISAM;


        z.B s_typ bedeutet hier das der User was sucht wie gesagt (Immobilie) und bei im table immobilien sind unter z.B. typ die Daten zur Immobilie gespeichert nun sollten beide tables verglichen werden und wenn ein passende Immobilie zum Suchprofil vom User passt sollte diese ausgegeben werden.
        lg

        Kommentar


        • #5
          Original geschrieben von churcher
          Was würdest du anstelle von LIKE nehmen???
          =

          schliesslich sind die werte ja bereits definiert. oder?
          zumindest macht ein LIKE keinen sinn bei ort.
          überdenke dir dies auch für die anderen felder...

          ich denke mal, dass diese anfrage an die datenbank die
          schnellere und bessere anfrage ist. und vorallem ist es
          nur eine abfrage.

          Code:
          SELECT  *
          FROM    kunden K
                    LEFT OUTER JOIN immobilien I ON K.s_typ = I.typ
          das ganze kannst du natürlich weiter mit WHERE einschränken.
          auch ein LIMIT ist nicht verkehrt, wenn du z.b. nur 10 immos
          auf einer seite darstellen willst. usw.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Super danke :-) Werde mir das morgen mal genauer anschauen, hast mir wirklich schon mal weiter geholfen :-)

            D A N K E :-)

            Kommentar


            • #7
              du weisst ja, dass morgen bereits in einer guten stunde ist ....

              wenn noch was ist, einfach hier rein posten.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Hi!

                Hat nun prima alles geklappt nur hab ich noch ein Problem wenn in einem Feld kein Eintrag ist gibt er mir dieses nicht aus hier der Such-String

                z.b. User hat in seinen Suchprofil:
                ART, TYP, PREIS eingegeben und das Bundesland nicht

                Immobilie hat die selben Kriterien nur steht bei dieser noch das Bundesland dabei -> Datensatz wird nicht ausgegeben ;-(
                Woran liegt das??


                PHP-Code:
                ("SELECT * FROM kunden K LEFT OUTER JOIN immobilien I ON K.s_typ = I.typ WHERE (K.s_art = I.art) AND (K.s_preis <= I.preis) AND (K.s_bundesland = I.bundesland)"); 
                DANKE :-)

                Kommentar


                • #9
                  wenn du die zu vergleichenden spaltennamen identisch benennst, kannst du auch so arbeiten

                  Code:
                  SELECT  *
                  FROM    kunden K
                            LEFT OUTER JOIN immobilien I USING(typ,art,bundesland)
                  den preis musst du natürlich separat machen.

                  den inhalt von USING kannst du auch dynamisch erstellen. jenachdem, ob der user alle kombinationen hat.

                  teste das mal.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    danke für deine rasche antwort, anders geht das nicht?? Problem ist das ich das ganze rund herum schon programmiert habe und super klappt und jetzt nur mehr dieses ein Feature nicht funktioniert

                    Kommentar


                    • #11
                      ist es eigentlich schlimm wenn ich das ganze mit 2 schleifen abfrage so wie in meinem 1. Lösungsansatz hat dies Nachteile???

                      Kommentar


                      • #12
                        nur auf die von dir bereits umständliche weise würde es gehen ....
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          na ich werde mal deine Version probieren mal schauen hoffe das ich es schaffe. Danke nochmal

                          Kommentar

                          Lädt...
                          X