I retrieve data from a MySQL database using a simple SELECT FROM WHERE LIKE case-insensitive query where I escape any %
or _
in the like clause, so really the user can only perform basic text research and cannot mess up with regex because I then surround it myself with %
in the LIKE clause.
For every row returned by this query, I have to search again using a JS script in order to find all the indexes of the substring in the original string. I dislike this method because I it's a different pattern matching than the one used by the LIKE query, I can't guarantee that the algorithm is the same.
I found MySQL functions POSITION
or LOCATE
that can achieve it, but they return only the first index if it was found or 0 if it was not found. Yes you can set the first index to search from, and by searching by passing the previously returned index as the first index until the new returned index is 0, you can find all indexes of the substring, but it means a lot of additional queries and it might end up slowing down my application a lot.
So I'm now wondering: Is there a way to have the LIKE
query to return substring positions directly, but I didn't find any because I lack MySQL vocabulary yet (I'm a noob).
1条答案
按热度按时间hgqdbh6s1#
Simple answer: No.
Longer answer: MySQL has no syntax or mechanism ot return an array of anything -- from either a
SELECT
or even a Stored Procedure.Maybe answer: You could write a Stored procedure that loops through one result, finding the results and packing them into a commalist. But I cringe at how messy that code would be. I would quickly decide to write JS code, as you have already done.
Moral of the story: SQL is is not a full language. It's great at storing and efficiently retrieving large sets of rows, but lousy at string manipulation or arrays (other than "rows").