2012-04-10 15 views
3

Hallo da nochmal Stackoverflow! 2 MySQL Fragen.MySQL: LIKE und erstes Zeichen

 $query = " SELECT 
         stationname 
        FROM 
         stations 
        WHERE 
         stationname >= '". mysql_real_escape_string($_GET['letter']) ."' 
        ORDER BY 
         stationname 
     "; 

Firstoff, hier ist die erste Abfrage. In der URL befindet sich ein Parametersatz $_GET['letter'], der ein alphabetisches Zeichen enthält. Ich versuche alle Zeilen auszuwählen, in denen stationname mit $_GET['letter'] beginnt. Also fand ich diese Lösung in einem anderen Stackoverflow-Thema, aber es scheint nicht zu funktionieren, ich bekomme alle meine Zeilen, und nicht nur diese einzelne. bearbeiten: scheint es für alle Zeichen in stationname überprüft, und nicht nur den Anfangsbuchstaben, wie kann ich das bekommen?

 $query = " SELECT 
         stationname 
        FROM 
         stations 
        WHERE 
         stationname 
        LIKE 
         '". mysql_real_escape_string($_POST['search']) ."' 
     "; 

Zweite und letzte Frage. Ich möchte eine Suchmaschine für meine Website erstellen und alle Zeilen auswählen, in denen stationname$_POST['search'] enthält. Aber wenn ich zwei Reihen, ein für Beispiel genannt cheese und die andere genannt cheese2, und ich suche nach cheese, nur cheese erhalten ausgewählt, und wenn ich für cheese2 zu suchen, nur cheese2 wird ausgewählt bekommen. Gibt es eine Möglichkeit, sowohl cheese als auch cheese2 auszuwählen?

+2

LIKE '% "mysql_real_escape_string ($ _ POST. '%. '[' Suchen])"' – hjpotter92

Antwort

11

LIKE unterstützt Platzhalter. % bedeutet, eine beliebige Anzahl von Zeichen (einschließlich Null) und _ bedeutet irgendeine character`

stationname LIKE 'cheese%' 

Diese cheese und cheese2 entsprechen würde.

Sie können die % auch für das erste Problem verwenden.

stationname LIKE 'a%' 

Hier finden Sie alle Wörter, die mit 'a' beginnen.

+0

Danke, kannst du bitte meine Bearbeitung überprüfen? – Thew

+1

+1 für '_', war davon nicht bewusst – mkk

+0

@Thew: Sie meinen für den Startzeichen? Funktioniert 'stationsname LIKE '% nicht? –

3

für Sekunde.

$query = " SELECT 
         stationname 
        FROM 
         stations 
        WHERE 
         stationname 
        LIKE 
         '". mysql_real_escape_string($_POST['search']) ."%' 
     "; 
+0

kann für den ersten auch verwendet werden. – hkutluay

+0

Danke, könnten Sie bitte meine Bearbeitung überprüfen? – Thew

+1

@Thew Abfrage oben überprüft nur Startzeichen. – hkutluay

1

Der Text Wildcard in MySQL ist%, so dass für Ihre erste Abfrage würden Sie wahrscheinlich wollen:

$query = " SELECT 
        stationname 
       FROM 
        stations 
       WHERE 
        stationname LIKE '". mysql_real_escape_string($_GET['letter']) ."%' 
       ORDER BY 
        stationname 
    "; 

Und für Ihre zweite Abfrage:

$query = " SELECT 
        stationname 
       FROM 
        stations 
       WHERE 
        stationname 
       LIKE 
        '%". mysql_real_escape_string($_POST['search']) ."%' 
    "; 
4

ich wählen bin versucht, alle Zeilen, in denen Stationsname mit $ _GET beginnt [ 'Brief']

MySQL hat eine LEFT Funktion, die zu sein scheint, was Sie suchen. Also im Grunde wir den ersten Buchstaben des stationname extrahieren und vergleichen Sie sie agains Ihren Brief:

where left(stationname, 1) = '" . mysql_real_escape_string($_GET['letter']) . "'"; 

Gibt es eine Möglichkeit, sowohl Käse und cheese2 zu wählen?

hier Nun, die Lösung ist ein wenig muffig, sollten Sie prüfen, ob cheese in cheese2 enthalten ist, und auch, ob cheese2 in cheese enthalten. Versuchen Sie folgendes:

where stationname like '%" . mysql_real_escape_string($_POST['search']) . 
    "%' OR '" . mysql_real_escape_string($_POST['search']) . 
    "' like concat('%', stationname, '%')"; 
0

FÜR Tel Anzahl

5 stellt fest, dass das erste Zeichen

$Sql="SELECT * FROM customers WHERE TEL REGEXP '^[5]' LIMIT 0,500";