Afragen sortierung like() problem

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

  • Afragen sortierung like() problem

    Guten Abend

    Ich arbeite an einer Suche, komme aber nicht mehr weiter und wäre froh wenn mir kurz jemand helfen kann.

    Problem:
    Ich gebe in einem Suchfeld eine Zahl ein z.B 12. Nun sucht das folgende Skript alle Nummern heraus die diese Zahl beinhalten. Damit es aber effektiver ist, möchte ich das die zahl wo 12 am Anfang steht zu oberst haben.

    Hier noch ein Bild zur Verdeutlichung http://img246.imageshack.us/my.php?image=suchevk7.jpg

    Gruss Markus

    PHP-Code:
    $var $_GET["search"];
           
           if (
    preg_match("/^\d+$/",$var))
           
    $var = (int)$var;
           
           if (
    is_int($var))   {
            
    $sql "SELECT pd.products_name, cd.categories_name, ptc.products_id, p.products_model
                    FROM (("
    .TABLE_PRODUCTS." AS p LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id))
                    INNER JOIN "
    .TABLE_PRODUCTS_TO_CATEGORIES." AS ptc ON (p.products_id = ptc.products_id)) 
                    INNER JOIN "
    .TABLE_CATEGORIES_DESCRIPTION." AS cd ON (ptc.categories_id = cd.categories_id)
                    WHERE p.products_status = '1'
                    [B]AND p.products_model like('%" 
    xtc_db_input($_GET['search']) . "%')[/B]
                    AND pd.language_id = '"
    .(int) $_SESSION['languages_id']."'".$fsk_lock.$group_check.
                    
    " ORDER BY p.products_model LIMIT 20"; } 
    Zuletzt geändert von psywolf; 12.01.2008, 22:08.

  • #2
    Code:
    '%" . xtc_db_input($_GET['search']) . "%'
    Nun was sagen dir die %-Zeichen auf beiden Seiten? Und was passiert wenn du das vordere entfernst?
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      Evt. mit einer UNION Abfrage, und bei der ersten eben das erste "%" weglassen:

      PHP-Code:
      $sql "SELECT 1 as sortierung, pd.products_name, cd.categories_name, ptc.products_id, p.products_model
                      FROM (("
      .TABLE_PRODUCTS." AS p LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id))
                      INNER JOIN "
      .TABLE_PRODUCTS_TO_CATEGORIES." AS ptc ON (p.products_id = ptc.products_id)) 
                      INNER JOIN "
      .TABLE_CATEGORIES_DESCRIPTION." AS cd ON (ptc.categories_id = cd.categories_id)
                      WHERE p.products_status = '1'
                      AND p.products_model like('" 
      xtc_db_input($_GET['search']) . "%')
                      AND pd.language_id = '"
      .(int) $_SESSION['languages_id']."'".$fsk_lock.$group_check."

              UNION

              SELECT 2 as sortierung, pd.products_name, cd.categories_name, ptc.products_id, p.products_model
                      FROM (("
      .TABLE_PRODUCTS." AS p LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id))
                      INNER JOIN "
      .TABLE_PRODUCTS_TO_CATEGORIES." AS ptc ON (p.products_id = ptc.products_id)) 
                      INNER JOIN "
      .TABLE_CATEGORIES_DESCRIPTION." AS cd ON (ptc.categories_id = cd.categories_id)
                      WHERE p.products_status = '1'
                      AND p.products_model like('%" 
      xtc_db_input($_GET['search']) . "%')
                      AND pd.language_id = '"
      .(int) $_SESSION['languages_id']."'".$fsk_lock.$group_check."
                      
      ORDER BY sortierung, p.products_model LIMIT 20"

      Kommentar


      • #4
        Evt. mit einer UNION Abfrage, und bei der ersten eben das erste "%" weglassen:
        Viel zu aufwendig ... eine verknüpfte Bedingung reicht doch aus.
        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Kommentar


        • #5
          Danke!

          Es lag nur am ersten %
          Wär da aber selbst kaum drauf gekommen xD Muss noch viel lernen.

          Bedeutet das zeichen die zeichen am anfang ignorieren? Ich weiss es ehrlich gesagt nicht genau. Wäre froh wenn das noch kurz jemand erklären könnte.
          Muss natürlich nicht mehr heute sein
          Zuletzt geändert von psywolf; 13.01.2008, 00:17.

          Kommentar


          • #6
            Du will programmieren und beherrschst noch nicht mal die elementarsten Sachen?

            Kommentar


            • #7
              Sorry.. ich hab das % noch nie so eingesetzt und weiss darum auch nicht darüber bescheid.
              War überhaut die erste frage die ich jemals bei php/mysql in einem forum gestellt habe. Und ja. bin immernoch dabei das beginners-manual komplett durchzulesen..

              //Danke tontechniker!
              Zuletzt geändert von psywolf; 13.01.2008, 13:17.

              Kommentar


              • #8
                Bei LIKE können Sie die folgenden beiden Jokerzeichen im Muster verwenden:
                Code:
                [i]Zeichen   Beschreibung[/i]
                % 	  entspricht einer beliebigen Anzahl von Zeichen (einschließlich null Zeichen).
                _ 	  entspricht genau einem Zeichen.
                Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                Kommentar


                • #9
                  Original geschrieben von tontechniker
                  Viel zu aufwendig ... eine verknüpfte Bedingung reicht doch aus.
                  Lt. Ausgangsfrage werden alle Ergebnisse mit "12%", sowie "%12%" gesucht, und die mit "12%" sollen in der Ergebnisliste oben erscheinen.

                  Mich wuerde interessieren, wie du das mit einer verkuepften Bedingung machst?

                  Kommentar


                  • #10
                    Original geschrieben von Lennynero
                    Lt. Ausgangsfrage werden alle Ergebnisse mit "12%", sowie "%12%" gesucht, und die mit "12%" sollen in der Ergebnisliste oben erscheinen.

                    Mich wuerde interessieren, wie du das mit einer verkuepften Bedingung machst?
                    z.B.
                    SELECT * FROM tabelle WHERE blubb LIKE "%12%" ORDER BY SUBSTR(blubb, 0, 2) = "12" DESC

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      Original geschrieben von ghostgambler
                      z.B.
                      SELECT * FROM tabelle WHERE blubb LIKE "%12%" ORDER BY SUBSTR(blubb, 0, 2) = "12" DESC
                      Danke!

                      Kommentar

                      Lädt...
                      X