Linuchs: Suche nach eingegebenen Keywords

Moin,

ich brauche mal Meinungen zum Finden von Suchbegriffen in einem Veranstaltungskalender.

Der Suchbegriff wird hier eingegeben. Ab drei Zeichen werden per Ajax Treffer von einem PHP-Programm geholt.

Bisher habe ich die Eingabe so umgesetzt

// p510ajax.php
$value = strtoupper( str_replace( " ", "%", addslashes($arr_in['v']))."%" );

Und suche damit in fünf Tabellen:

  • noch nicht registrierte Veranstalter

  • Orte

  • Titel von Events

  • Veranstaltungstypen

  • registrierte Veranstalter

Ich zeige die ersten zehn Treffer an. Und bei Klick wird einer in das Suchfeld übernommen.

Fragen:

  • Macht es Sinn, die Treffer alfabetisch zu sortieren? Ich probe gerade das Chaos mit Zufallsfolge.
  • Eigentlich könnte ich mit den Treffern schon Links generieren, anstatt sie in das Suchfeld zu übernehmen.

Bin offen für Ideen.

Gruß, Linuchs

  1. als sechste Tabelle ziehe noch die Medien heran, also Hörproben. Die sechs SELECTS sind mit UNION verknüpft.

    Nun gibt es dort beim Suchbegriff "veermas" mehrere Einträge für "Hamburger Veermaster". Den möchte ich aber nur einmal und bekomme den Fehler 1064, nachdem ich DISTINCT hinzugefügt habe:

    ...
    )
    UNION
    (
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Medien
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    SELECT
     '0'          ITR
    ,'1'          MED
    ,'0'          ORT
    ,'0'          TID
    ,'0'          TRP
    ,'0'          TYP
    ,'0'          VIP
    ,DISTINCT med1.titel   benennung
    ,''           land_kz
    ,''           plz
    ,''           ort_name
    FROM      medien med1
    WHERE     UPPER( med1.titel ) LIKE '%VEERMAS%' COLLATE utf8_bin
    AND       med1.zeit_erreichbar > '0'
    )
    UNION
    (
    ...
    

    Mehrfach-Einträge in anderen Tabellen möchte ich sehen. Sie können (aber müssen nicht) falsch sein.

    Wie geht das?

    Habe den DISTINCT wieder rausgenommen, damit ich weiterarbeiten kann.

    Linuchs

    1. Wie geht das?

      Ich hatte ausser dem DISTINCT noch die Konstante ,'1' MED gesetzt, wo ich vorher ,med1.id MED hatte.

      Nach Herausnahme des DISTINCT waren die Doppel-Einträge weg.

      Habe hier was dazu gefunden:

      "The default behavior for UNION is that duplicate rows are removed from the result."

      Und wenn man alle rows haben will, heisst es UNION ALL. Oder eben ein zusätzliches Feld zum Unterscheiden. Muss einem ja geschrieben werden.

      Linuchs