Trade Republic - Provisionsfrei Aktien handeln
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Suchergebnisse - Minus in Artikelnummer

    cplasa

    • Fördermitglied
    • Beiträge: 200
    • Geschlecht:
    Suchergebnisse - Minus in Artikelnummer
    am: 01. Februar 2016, 14:46:16
    Hallo zusammen,

    in unserem Shop werden seite neuem (neuer Hersteller) Artikelnummern mit Minuszeichen aufgenommen.

    Z.B. Art.-Nr.: 17655-750

    Da Afterbuy allerdings nur numerische Werte akzeptiert, habe ich in der afterbuy.php die Übertragung auf Zahlen beschränkt.

    Code: PHP  [Auswählen]
                            $artnr = preg_replace('![^0-9]!', '', $artnr);

    Auf der Rechnung des Kunden wird also später folgende Artikelnummer auftauchen: 17655750

    Wenn er diese allerdings in die Suchmaske eingibt erhält er - natürlich - keine Ergebnisse.

    In der advanced_search_result.php werden ja wenn ich das richtig sehe die Artikeldaten hier ausgelesen:

    Code: PHP  [Auswählen]
      $select_str = "SELECT distinct
                        $add_select
                        p.products_id,
                        p.products_ean,
                        p.products_quantity,
                        p.products_shippingtime,
                        p.products_model,
                        p.products_image,
                        p.products_price,
                        p.products_weight,
                        p.products_tax_class_id,
                        p.products_fsk18,
                        p.products_vpe,
                        p.products_vpe_status,
                        p.products_vpe_value,
                        pd.products_name,
                        pd.products_short_description,
                        pd.products_description "
    ;

    Hat jemand eine Idee wie ich p.products_model zusätlich "ohne Sonderzeichen" in die Suchergebnisse einfügen kann?

    Danke im Voraus.
    Viele Grüße
    Christian

    Linkback: https://www.modified-shop.org/forum/index.php?topic=34295.0
    Templateshop - Eine große Auswahl an neuen und modernen Templates für die modified eCommerce Shopsoftware

    swolfram [templatix]

    • Fördermitglied
    • Beiträge: 1.169
    • Geschlecht:
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #1 am: 01. Februar 2016, 16:34:42
    In der Datei ist ja irgendwo dann die Abfrage "[...] WHERE p.products_model like %...% AND [...]"
    Diese müsste dann nur erweitert werden um die Abfrage ohne Sonderzeichen, wenn ich Dich richtig verstanden habe.

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #2 am: 01. Februar 2016, 17:53:49
    Habe in meiner advanced_search_result so was drin:
    Code: PHP  [Auswählen]
      // reformat isbn
      $isbn= (int)trim(str_replace(array('-',' ', '.'),array('','',''),$isbn));  
     
    Da wird aber direkt im Datenbankfeld products_ean gesucht.

    Du müsstest das verstehen:
    Code: PHP  [Auswählen]
          for ($i = 0, $n = sizeof($search_keywords); $i < $n; $i ++) {
            switch ($search_keywords[$i]) {
              case '(' :
              case ')' :
              case 'and' :
              case 'or' :
                $where_str .= " ".$search_keywords[$i]." ";
                break;
              default :
              $ent_keyword = encode_htmlentities($search_keywords[$i]); // umlauts
              $ent_keyword = $ent_keyword != $search_keywords[$i] ? addslashes($ent_keyword) : false;
              $keyword = addslashes($search_keywords[$i]);
     
    In Kombination damit:
    Code: PHP  [Auswählen]
                              $where_str .= "OR pd.products_name $precision ($lq".$keyword."$rq) ";
                              $where_str .= $ent_keyword ? "OR pd.products_name $precision ($lq".$ent_keyword."$rq) " : '';
     

    Einmal suche nach z.B.
    Code: XML  [Auswählen]
    "Faß"
    und einmal nach
    Code: XML  [Auswählen]
    "Fa&szlig;"
    ... da fehlt jetzt noch einmal nach
    Code: PHP  [Auswählen]
    str_replace('-','',$keyword)

    cplasa

    • Fördermitglied
    • Beiträge: 200
    • Geschlecht:
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #3 am: 02. Februar 2016, 12:17:20
    Danke euch für eure Antworten :-)

    Werde das heute testen und Rückmeldung geben.

    Viele Grüße
    Christian

    Teichbau

    • Fördermitglied
    • Beiträge: 385
    • Geschlecht:
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #4 am: 02. Februar 2016, 12:54:07
    Wir haben sehr viele Artikel mit Sonderzeichen 123-14 oder 123.456
    Da die Leute die Artikelnummern eh nicht richtig/komplett eingeben, haben wir einfach in der DB Tabelle products_description in der Spalte products_keywords die Art.-Nr. ohne Sonderzeichen zusätzlich hinterlegt.
    12314, 123456
    Somit werden die Artikel auch über die Suche gefunden.

    cplasa

    • Fördermitglied
    • Beiträge: 200
    • Geschlecht:
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #5 am: 03. Februar 2016, 09:47:24
    @Bonsai

    Deine Lösung mit
    Code: PHP  [Auswählen]
    str_replace('-','',$keyword)
    funktioniert natürlich, wenn die Sucheingabe ein Minuszeichen enthält und es entfernt werden soll.

    Mein Fall ist ja genau umgekehrt. Das Minuszeichen ist in der Artikelnummer selbst enthalten (p.products_model), wird von potenziellen "suchenden" aber nicht eingegeben.

    Habe in meiner advanced_search_result so was drin:
    Code: PHP  [Auswählen]
      // reformat isbn
      $isbn= (int)trim(str_replace(array('-',' ', '.'),array('','',''),$isbn));  
     
    Da wird aber direkt im Datenbankfeld products_ean gesucht.

    Genau das ist mein Problem. Ich beherrsche die Syntax nicht ausreichend um ein str_replace auf p.products_model anzuwenden.

    Sinngemäß müsste es ja irgendwie so gehen (Pseudocode)

    p.products_model_removetrash = str_replace('-','',p.products_model )

    Was dann hinterher mit
    Code: PHP  [Auswählen]
              $where_str .= "OR p.products_model_removetrash LIKE ('%".$keyword."%') ";
              $where_str .= $ent_keyword ? "OR p.products_model_removetrash LIKE ('%".$ent_keyword."%') " : '';

    abgefragt wird.

    Kannst Du mir da noch einen Denkanstoß geben?

    Danke & Viele Grüße
    Christian

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #6 am: 03. Februar 2016, 09:58:34
    :datz: Ja sorry. Ich speicher die ISBN ohne -

    Darfst Du auf Deinem MySQL Server stored procedures? Damit würde es gehen.

    Versuch mal ob Du die SQL Funktionen aus diesem Modul
    https://www.modified-shop.org/forum/index.php?topic=11154.0
    installieren darfst.

    Wenn nicht, rede mal mit dem Provider. Wenn Du nicht gerade bei solchen Volldeppen wie 1und1 bist, dann schalten Die Dir die Rechte zum anlegen und ausführen solcher SQL Funktionen eventuell frei.

    Eine Lösung in PHP fällt mir gerade nicht ein .... jedenfalls keine die performant genug wäre.

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #7 am: 03. Februar 2016, 10:04:50
    Noch eine Idee ..... Schau Dir mal das an!
    https://davidwalsh.name/mysql-replace

    Fakrae

    • Viel Schreiber
    • Beiträge: 997
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #8 am: 03. Februar 2016, 10:39:56
    Wäre es in diesem engen Bereich nicht möglich über mysql regexp nach nur den Zahlen zu suchen?
    Oder hast du andere Punkte die immer gleich sind (bspw, die Anzahl nach dem "-" sind immer 3 Stellen oder so, dann könnte man dazu den Suchstring modifizieren)

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #9 am: 03. Februar 2016, 11:26:53
    Code: SQL  [Auswählen]
    WHERE (REPLACE(p.products_model, '-', '') LIKE "%Suchbegriff%" OR p.products_model LIKE "%Suchbegriff%")

    karsta.de

    • Experte
    • Beiträge: 3.157
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #10 am: 03. Februar 2016, 13:52:31
    Danke Bonsai, so kann man auch Leerzeichen im Artikel-Namen ignorieren.  :idea:

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #11 am: 03. Februar 2016, 16:17:00
    Habe in meiner advanced_search_result so was drin:
    Code: PHP  [Auswählen]
      // reformat isbn
      $isbn= (int)trim(str_replace(array('-',' ', '.'),array('','',''),$isbn));  
     
    ...

    Kürzer:
    Code: PHP  [Auswählen]
      // reformat isbn
      $isbn= (int)trim(str_replace(array('-',' ', '.'), '', $isbn));  
     

    Gruß,
    noRiddle

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #12 am: 03. Februar 2016, 16:58:49
    Danke, aber seit ich mal 3 Stunden den Fehler gesucht habe, weil das:
    Code: PHP  [Auswählen]
    $var = str_replace(array('-',' ', '.'), '', $var);
    nicht das gemacht hat was in der doku steht, nehme ich immer die lange Variante.

    cplasa

    • Fördermitglied
    • Beiträge: 200
    • Geschlecht:
    Re: Suchergebnisse - Minus in Artikelnummer
    Antwort #13 am: 04. Februar 2016, 08:26:57
    Genial!  :thx: dafür.

    Muss gestehen, dass mir erst im Laufe dieses Threads aufgefallen, dass es sich um SQL handelt.....  :datz:

    So sieht das nun im Ergebnis bei mir aus:

    Code: PHP  [Auswählen]
    $where_str .= "OR p.products_model LIKE ('%".$keyword."%') ";
    $where_str .= $ent_keyword ? "OR p.products_model LIKE ('%".$ent_keyword."%') " : '';

    Ersetzt mit:

    Code: PHP  [Auswählen]
    $where_str .= "OR (REPLACE(p.products_model, '-', '') LIKE ('%".$keyword."%')) OR p.products_model LIKE ('%".$keyword."%') ";
    $where_str .= $ent_keyword ? "OR (REPLACE(p.products_model, '-', '') LIKE ('%".$ent_keyword."%')) OR p.products_model LIKE ('%".$ent_keyword."%') " : '';

    Viele Grüße
    Christian
    6 Antworten
    5240 Aufrufe
    16. September 2011, 08:50:04 von rockmartin
    2 Antworten
    2096 Aufrufe
    07. Juni 2010, 19:15:09 von graffitiartworks
    15 Antworten
    12259 Aufrufe
    07. April 2019, 10:53:17 von hexenkesselchen
    117 Antworten
    42323 Aufrufe
    03. November 2022, 06:04:41 von esoversum