suchen in 2 felden

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

  • suchen in 2 felden

    also, ich möchte aus einer tabelle mittels einer suchfunktion in 2 feldern der tabelle suchen: in zk_m_linktext und zk_m_didaktik. also wenn der gesuchte begriff in dem einen feld oder dem anderen feld vorkommt, dann soll ein ergebnis geliefert werden.

    PHP-Code:
    if(isset($_POST["t"])) {
      
    $WHERE[] = sprintf("zk_m_linktext OR zk_m_didaktik REGEXP '%s'"$_POST["t"]); 
    mit diesem code sucht er nur im zk_m_didaktik, also 2. feld, das erste wird ignoriert. kann man das nicht mi OR verbinden?

    joachim

  • #2
    Ja kannst Du ... nur solltest Du's syntaktisch richtig machen ..

    zk_m_linktext REGEXP '%s' OR zk_m_didaktik REGEXP '%s'
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      Original geschrieben von goth
      Ja kannst Du ... nur solltest Du's syntaktisch richtig machen ..

      zk_m_linktext REGEXP '%s' OR zk_m_didaktik REGEXP '%s'
      daran dachte ich auch schon, aber dann hagelt es fehlermeldungen;

      Warning: sprintf(): Too few arguments in /home/zeugner/www.zeugner.at/neu/ergebnis.php on line 21
      --> $WHERE[] = sprintf("zk_m_linktext REGEXP '%s' OR zk_m_didaktik REGEXP '%s'", $_POST["t"]);

      Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/zeugner/www.zeugner.at/neu/ergebnis.php on line 43

      Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/zeugner/www.zeugner.at/neu/ergebnis.php on line 64

      Kommentar


      • #4
        Sollte logisch sein das Du für beide Argumente 'nen entsprechenden String angeben musst ... also entweder:

        sprintf("zk_m_linktext REGEXP '%s' OR zk_m_didaktik REGEXP '%s'", $_POST["t"], $_POST["t"])

        oder eventuell auch:

        sprintf("zk_m_linktext REGEXP '%1\$s' OR zk_m_didaktik REGEXP '%1\$s'", $_POST["t"])

        Wodurch dann beide Male auf das 1. Argument verwiesen würde .. !
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          Original geschrieben von goth
          Sollte logisch sein das Du für beide Argumente 'nen entsprechenden String angeben musst ... also entweder:

          sprintf("zk_m_linktext REGEXP '%s' OR zk_m_didaktik REGEXP '%s'", $_POST["t"], $_POST["t"])

          oder eventuell auch:

          sprintf("zk_m_linktext REGEXP '%1\$s' OR zk_m_didaktik REGEXP '%1\$s'", $_POST["t"])

          Wodurch dann beide Male auf das 1. Argument verwiesen würde .. !
          leider NEGATIV, es werden nur ergebnisse angezeigt, wenn sie im ersten feld vorkommen

          Kommentar


          • #6
            für deinen Fall reicht ja auch like, warum verwendest du regex mit so einem simplen Muster

            Kommentar


            • #7
              Original geschrieben von nyfan
              leider NEGATIV, es werden nur ergebnisse angezeigt, wenn sie im ersten feld vorkommen
              Gib mal das vollständig generierte Statement aus .. und dann poste es ... der genannte ausschnitt ist so erstmal vollkommen korrekt ... !
              carpe noctem

              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

              Kommentar


              • #8
                Original geschrieben von goth
                Gib mal das vollständig generierte Statement aus .. und dann poste es ... der genannte ausschnitt ist so erstmal vollkommen korrekt ... !
                PHP-Code:
                <?php

                mysql_connect
                ("xxx""xxx""xxx") or
                   die(
                "Keine Verbindung: " mysql_error());
                mysql_select_db("wbsdb");

                $SQL "SELECT * FROM zk_materialien";

                if(isset(
                $_POST["k"])) {
                  
                $WHERE[] = sprintf("zk_m_kontinent = '%s'"$_POST["k"]);
                }
                if(isset(
                $_POST["e"])) {
                  
                $WHERE[] = sprintf("zk_m_erweiterung = '%s'"$_POST["e"]);
                }
                if(isset(
                $_POST["d"])) {
                  
                $WHERE[] = sprintf("zk_m_didaktik = '%s'"$_POST["d"]);
                }
                if(isset(
                $_POST["t"])) {
                  
                $WHERE[] =  sprintf("zk_m_linktext REGEXP '%s' OR zk_m_didaktik REGEXP '%s'"$_POST["t"], $_POST["t"]);
                }  
                  
                  if(
                count($WHERE) < 1) {
                  
                // Kein Parameter gegeben, kp was dann machen ;)
                  
                return false;
                } else {
                  
                $SQL sprintf("%s WHERE %s"$SQLjoin(" AND "$WHERE));
                }

                /* Gibt nachher Statements aus wie:
                SELECT * FROM tabelle WHERE zk_m_schulstufe = 'abc'
                oder
                SELECT * FROM tabelle WHERE zk_m_schulstufe = 'abc' OR zk_m_erweiterung =
                '123'
                oder wenn alle 3 Parameter da sind
                SELECT * FROM tabelle WHERE zk_m_schulstufe = 'abc' OR zk_m_erweiterung =
                '123' OR zk_m_erweiterung = 'xyz'
                */


                  
                $RS mysql_query($SQL);
                  
                $ROWS=mysql_num_rows($RS);  

                switch(
                $ROWS) {
                    case 
                "0":
                    echo
                "<br><br><br><table width='100%' cellpadding='5' cellspacing='1'>\n
                          <tr>\n<td class='eintrag_grau'><br><br>Bei der Suche nach <span class='rot'>&laquo; 
                $k $e $d $t &raquo;</span> wurden leider keine Datens&auml;tze gefunden.<br><br>\nProbieren Sie es nocheinmal und verwenden Sie andere Suchbegriffe.<br><br></td>\n</tr>\n<tr>\n<th align='left'><br><br><a href='index.php?page=suche' class='link'>&raquo; Suche wiederholen</a></th>\n</tr>\n</table>\n";
                    break;

                    case 
                "1":
                    echo
                "<table width='100%' cellpadding='5' cellspacing='1'>\n
                          <tr>\n<td colspan='3' class='eintrag_grau'>Bei der Suche nach <span class='rot'>&laquo; 
                $k $e $d $t &raquo;</span> wurde <span class='rot'>$ROWS Datensatz</span> gefunden:</td>\n</tr>\n<tr>\n<th width='15%'><br>Buch|Seite</th>\n<th width='40%'><br>Download/Begleitheft|Seite</th>\n<th><br>Methodik-Didaktik</td>\n</tr>\n";
                    while (
                $r mysql_fetch_array($RS))
                    {
                    echo
                "<tr>\n<td valign='middle' class='eintrag'>$r[zk_m_buch]</li></td>\n<td valign='middle' class='eintrag'><a href='count.php?url=http://www.zeugner.at/neu/files/$r[zk_m_art]/$r[zk_m_linkurl].$r[zk_m_art]&id=$r[zk_m_id]' class='link' target='_blank'><img src='img/$r[zk_m_art].gif' align='top' border='0'> $r[zk_m_linktext] ($r[zk_m_art])</a><span class='rot'> $r[zk_m_begl]</span></td><td valign='middle' class='eintrag'>$r[zk_m_metdid]</td>\n</tr>\n";
                    }
                      echo
                "</table>\n";
                    break;
                    
                    default:
                    echo
                "<table width='100%' cellpadding='5' cellspacing='1'>\n
                          <tr>\n<td colspan='3' class='eintrag_grau'>Bei der Suche nach <span class='rot'>&laquo; 
                $k $e $d $t &raquo;</span> wurden <span class='rot'>$ROWS Datens&auml;tze</span> gefunden:</td>\n</tr>\n<tr>\n<th width='15%'><br>Buch|Seite</th>\n<th width='40%'><br>Download/Begleitheft|Seite</th>\n<th><br>Methodik-Didaktik</th>\n</tr>\n";
                    while (
                $r mysql_fetch_array($RS))
                    {
                    echo
                "<tr>\n<td valign='middle' class='eintrag'>$r[zk_m_buch]</li></td>\n<td valign='middle' class='eintrag'><a href='count.php?url=http://www.zeugner.at/neu/files/$r[zk_m_art]/$r[zk_m_linkurl].$r[zk_m_art]' class='link' target='_blank'><img src='img/$r[zk_m_art].gif' align='top' border='0'> $r[zk_m_linktext] ($r[zk_m_art])</a><span class='rot'> $r[zk_m_begl]</span></td>\n<td valign='middle' class='eintrag'>$r[zk_m_metdid]</td>\n</tr>\n";
                    }
                      echo
                "</table>\n";
                    break;
                }
                  
                mysql_free_result($RS);
                        

                ?>

                Kommentar


                • #9
                  Das ist eigentlich nicht das, was ich unter Statement verstehen würde ...

                  Anyway ... zunächstmal würde ich Klammern ...

                  sprintf("[color=red]([/color]zk_m_linktext REGEXP '%s' OR zk_m_didaktik REGEXP '%s'[color=red])[/color]", $_POST["t"], $_POST["t"])

                  weil nach vorrang Regel OR niedrigere Priorität hat als AND ... dann (nachdem Du das Statement gesendet hast) sehen wir weiter ... !
                  carpe noctem

                  [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                  [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                  Kommentar


                  • #10
                    Original geschrieben von goth
                    Das ist eigentlich nicht das, was ich unter Statement verstehen würde ...

                    Anyway ... zunächstmal würde ich Klammern ...

                    sprintf("[color=red]([/color]zk_m_linktext REGEXP '%s' OR zk_m_didaktik REGEXP '%s'[color=red])[/color]", $_POST["t"], $_POST["t"])

                    weil nach vorrang Regel OR niedrigere Priorität hat als AND ... dann (nachdem Du das Statement gesendet hast) sehen wir weiter ... !
                    die klammern brachten nichts .... sorry aber was meinst du mit statement?
                    eine fehlermeldung kommt nämlich keine, es wird nur falsch gesucht.

                    Kommentar


                    • #11
                      was meinst du mit statement?
                      das sql-statement, welches du erzeugst!

                      UMBRICHST DU BITTE DEINEN CODE? DANKESCHÖN!
                      Die Zeit hat ihre Kinder längst gefressen

                      Kommentar


                      • #12
                        OffTopic:
                        ich verstehe immer noch nich, was du mit regex willst, hast du denn so tolle User die, regex-Suchmuster eintippen können?


                        mach mal echo $SQL; und poste das Ergebnis.

                        Kommentar


                        • #13
                          Original geschrieben von asp2php
                          OffTopic:
                          ich verstehe immer noch nich, was du mit regex willst, hast du denn so tolle User die, regex-Suchmuster eintippen können?


                          mach mal echo $SQL; und poste das Ergebnis.
                          SELECT * FROM zk_materialien WHERE (zk_m_linktext REGEXP 'reis' OR zk_m_didaktik REGEXP 'reis')


                          regex ... hilfe eines users, da ich es alleine nicht hinbrachte. ist es anders einfacher zu realisieren? ich brauch das regex nicht unbedingt. ich möchte wie gesagt nur in 2 feldern einer tabelle gleichzeitig suchen können.

                          Kommentar


                          • #14
                            blödmann

                            bin ein blödmann, ich hab in einem falschen feld gesucht ...

                            trotzdem, wenn regexp nicht so sinnvoll ist, welcher code wäre gscheiter?

                            joachim

                            Kommentar


                            • #15
                              z.B. :

                              PHP-Code:
                              SELECT FROM zk_materialien WHERE (zk_m_linktext LIKE '%reis%' OR zk_m_didaktik LIKE '%reis%'
                              [Test] MySQL cli Emulator

                              Kommentar

                              Lädt...
                              X