我需要一个仅使用LIKE搜索1字段的SQLite查询.
基本示例:
SELECT name FROM table WHERE name LIKE "%John%" ORDER BY name LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
问题是我希望以这种方式对结果进行排序:
以下查询实现了预期结果,但速度很慢:
SELECT name FROM table WHERE name LIKE "%John%" ORDER BY CASE WHEN name = "John"
THEN 1 ELSE 2 END, CASE WHEN name LIKE "John%" THEN 1 ELSE 2 END, name LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
上面的查询比使用3个单独的查询(一个用于完全匹配,一个用于开始,一个用于包含)的替代方法更慢(或我测试不正确).
还有其他选择吗?
我在我的数据库中使用以下查询,
SELECT b.sales_id,b.category_id,b.sale_starts,b.sale_ends
FROM tbl_sales b WHERE b.active=1
UNION
SELECT b.sales_id,b.category_id,b.sale_starts,b.sale_ends
FROM tbl_sales b INNER JOIN tb_category c ON b.category_id=c.cat_id
WHERE c.cat_keyword LIKE 'a' ORDER BY sale_ends DESC
Run Code Online (Sandbox Code Playgroud)
得到如下结果,
sales_id | category_id |sale_starts | sale_ends
----------|---------------------|------------|--------------
1 | 10 | 2012-03-31 | 2012-04-30
2 | 11 | 2012-03-22 | 2012-04-27
3 | 25 | 2012-03-31 | 2012-04-25
4 | 12 | 2012-04-05 | 2012-04-11
Run Code Online (Sandbox Code Playgroud)
现在我需要得到如下结果,即具有today's date/current date assale_ends 的行必须显示在订单的顶部(假设今天的日期/当前日期是2012-04-11),如下所示 -
sales_id | category_id |sale_starts | sale_ends …Run Code Online (Sandbox Code Playgroud) 我有一张看起来像这样的桌子:
| id | fk_book | name |
-----------------------
| 1 | 2 | test1|
| 3 | 2 | test3|
| 6 | 3 | notes|
| 7 | 2 | test2|
Run Code Online (Sandbox Code Playgroud)
不,我想获得id为3. select*from test where id = 3 AND fk_book = 1;
但是还有一种方法可以获得id为1和7的项目吗?我不知道其他条目的ID
谢谢