Concat() in mysql-Abfrage
ich habe ein problem das verketten von string in einer mysql-Abfrage.
hier ist meine Abfrage:
SELECT *, CONCAT(nombre,' ',apellido) AS fullname FROM user WHERE nombre LIKE '%$busqueda%' OR apellido LIKE '%$busqueda%' OR email LIKE '%$busqueda%' OR about LIKE '%$busqueda%' OR place LIKE '%$busqueda%' or fullname LIKE '%$busqueda%'
jedoch schlägt die Abfrage fehl:
Query failed: Unknown column 'fullname' in 'where clause'
Proabably ist nur ein Syntax Fehler, thx
Eine Vielzahl von Antworten. dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html
InformationsquelleAutor Dan Stern | 2010-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht Referenz-Aliase in der WHERE-Klausel.
Quelle
Können Sie ändern:
zu
Durch die Art und Weise, alle diejenigen, die Gerne gehen, um Ihre Abfrage sehr langsam. Vielleicht möchten Sie sich in einem Volltextsuche statt.
InformationsquelleAutor Mark Byers
Können Sie nicht tun, einen Vergleich auf einem Feld, das Sie erstellen, die in der SELECT-Anweisung.
Verwenden
seien Sie sich aber bewusst, dass dies wahrscheinlich nicht optimieren für den Motor, also Suche wahrscheinlich sehr langsam. Wenn dies bei größeren Datenmengen, würde ich prüfen, halten eine separate verketteten Spalte für die Suche statt.
InformationsquelleAutor Pekka 웃
müssen Sie legen Sie die Concat() in der WHERE-auch:
InformationsquelleAutor The Scrum Meister
verwenden :
InformationsquelleAutor Tebo
Als wurden Sie nicht verwenden Sie spaltenaliasnamen in einem
WHERE
- Klausel. Dies ist, weil dieWHERE
- Klausel verwendet wird, bevor alle Werte werden auch gefunden, daher die Ausdrücke in der Spalte Aliase werden nicht berechnet, wenn nach der Zeile(N) abgerufen werden.Nun, wenn Sie nicht wollen, führen Sie die CONCAT zweimal (in der
SELECT
man in derWHERE
), können Sie die Vorteile derHAVING
- Klausel. DieHAVING
- Klausel funktioniert genauso wieWHERE
, nur es wird verwendet nach Zeilen abgerufen wurden.Lesen Sie mehr: http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html
SELECT *, CONCAT(nombre,' ',apellido) AS fullname FROM user WHERE nombre LIKE '%$busqueda%' OR apellido LIKE '%$busqueda%' OR email LIKE '%$busqueda%' OR about LIKE '%$busqueda%' OR place LIKE '%$busqueda%' HAVING fullname LIKE '%$busqueda%'
Beachten Sie, dass dies nicht unbedingt so gut funktionieren, wenn Sie suchen die besten Leistung.
InformationsquelleAutor aaronofleonard
der Syntax ist, mich zu töten....
die nächste Abfrage ist, die Probleme zu:
Fehler:
InformationsquelleAutor Dan Stern
Verketten Sie Ihre eigene string-parameter string-und die zweite ist die Spalte name, in dem Sie verketten möchten mit diesem code, der CONCAT-Funktion
SELECT concat( 'ConcatString',
columnName
) ALS newColumnName VONproducts
WHERE 1 LIMIT 0 , 30InformationsquelleAutor Rajneesh Gautam