2010-12-08 31 views
2

ich PHP bin mit einem Mysql DB suchen, ich bin Echo der Abfrage, so kann ich sehen, was durchmachen, seine herauskommt wie folgt aus:Mysql Suche mit PHP

select * from `parts` where 'category' like 'at' 

Jedoch wird nichts zurückgegeben zu werden . Ich weiß, dass es definitiv eine Spalte namens "Kategorie" und ein Feld namens "at" gibt. Wenn ich% at% mache, gibt es nur jedes Ergebnis zurück!

Grund mag ich alle Datensätze erhalten, wo bei einem Wert in der Kategorie Spalte ist

+0

Welcher Typ ist das Feld? Welche Sortierung ist der Tisch? –

+0

Bitte teilen Sie uns mehr über das Kategoriefeld und die darin enthaltenen Werte mit. zB ist es auf zwei Zeichen festgelegt oder erlaubt es längere Zeichenfolgen? Ist es Groß- und Kleinschreibung? Bitte zeigen Sie uns einige der anderen Werte, die ausgewählt werden, wenn Sie "% at%" eingeben; sind es wirklich alle Werte oder könnte es sein, dass Sie einfach viele Kategorien haben, die irgendwo die Buchstaben "at" enthalten. Hast du "at%" probiert? – Spudley

+1

er versucht, zwei Felder zu vergleichen. –

Antwort

2

select * from parts wo 'Kategorie' wie ‚bei '

Das macht keinen Sinn - die Zitate um Kategorie erklären es als ein literaler Wert und nicht als ein Attributname.

Ich weiß, es gibt definitiv eine Spalte namens "Kategorie" und ein Feld namens "at".

Das wird verwirrend. Der Ausdruck "Spalte" ist oft anstelle von "Attribut" (Letzteres ist die korrekte Art, die Datenstruktur in einer relationalen Datenbank zu beschreiben). Wie für 'Feld' - meinst du eine Instanz eines Attributs?

Ich glaube, Sie Ihren Code bedeutet dies zu tun:

select * from parts where category like '%at%' 

(die backticks um Datenbankentitäten optional sind - das heißt nicht-wörtliche Werte - es sei denn, sie Leerzeichen enthalten). Beachten Sie, dass ohne Platzhalter te wie Operator ist messey also, wenn Sie für die Werte Matching ‚auf‘ und nicht ‚Katze‘ oder ‚anhängen‘ ....

select * from parts where category='at' 
1

Aus Ihrer Frage nicht klar ist, welche Literale sein sollte und welche Feldnamen sein sollte. Verwenden Sie linke Apostrophe für Feldnamen. Also, wenn Sie alle Datensätze möchten, wo Kategoriefeld enthält wörtliche "at", tun:

Ändern Sie Ihre Angebote:

select * from `parts` where `category` like '%at%' 
1

Nicht sicher schauen, was meinst du Feld „at“, aber wenn es einen Zeilenwert nannte dies mit wie auf diese Weise Versuchen

select * from `parts` where category='at'; 
+0

er versucht, o zwei Felder zu vergleichen. Dies wird nicht funktionieren. –

+0

Nein, er sagt "Ich möchte alle Datensätze erhalten, wo bei ist ein Wert in der Kategorie Spalte" – rustyx

+0

opsss Pech trotzdem danke –

1

Sie können nicht wirklich zwei Felder vergleichen. Das zweite Argument von Like ist ein Muster und wird als regulärer Ausdruck interpretiert. Sie können dies versuchen:

select * from parts where category like concat('%', at, '%') 

Es wird der Wert aus dem in Feld nehmen, fügen Sie die Zeichen% dann die Felder vergleichen.