如何 return 与列中的值不匹配的行?
How to return rows that do not match a value in a column?
Sphinx 文档有一个使用 SphinxQL 的简单示例:
SELECT * FROM test WHERE MATCH('@title hello @body world')
假设我向名为 ids
的 table 添加了一个 varchar 列,其中包含由逗号等内容分隔的整数值。例如:
-------------------------------
| title | body | ids |
-------------------------------
| hello | world | 5,251,87580 |
-------------------------------
如果我想将上面的示例查询修改为仅包含特定 ID 的 select 行,那么我 认为 我可以简单地将其更改为:
SELECT * FROM test WHERE MATCH('@title hello @body world @ids 251')
对吗?
但是,我想做的实际上是 return 行 不 在 ids
列中包含特定 ID。这可能吗?
编辑:
我想我找到了答案,因为我从 "boolean expressions" 下找到的 SphinxQL 文档或类似的东西中分支出来,您可以简单地将确切的短语(或在本例中为数字)放在引号中,然后在前面打一个负号。
所以示例查询简单地变成:
SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"251"')
我认为它有效,但它没有。
如果我将不想匹配的ID从251
更改为11
,并且table中存在以下列:
-------------------------------
| title | body | ids |
-------------------------------
| hello | world | 5,111,87580 |
-------------------------------
然后这个查询:
SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"11"')
不是 return 那一行,因为 Sphinx 显然匹配“111”内部的“11”。
有我的conf设置:
index_field_lengths = 1
morphology = stem_en
min_word_len = 1
min_prefix_len = 1
prefix_fields = name
expand_keywords = 1
我从 SphinxQL 文档分支出来,发现在 "boolean expressions" 或类似的东西下,您可以简单地将确切的短语(或在本例中为数字)放在引号中,然后在前面放一个减号。
因此示例查询简单地变为:
SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"251"')
我测试了一下,好像可以用!
我想我会把问题留在这里,以防其他人发现它有用:-)
Sphinx 文档有一个使用 SphinxQL 的简单示例:
SELECT * FROM test WHERE MATCH('@title hello @body world')
假设我向名为 ids
的 table 添加了一个 varchar 列,其中包含由逗号等内容分隔的整数值。例如:
-------------------------------
| title | body | ids |
-------------------------------
| hello | world | 5,251,87580 |
-------------------------------
如果我想将上面的示例查询修改为仅包含特定 ID 的 select 行,那么我 认为 我可以简单地将其更改为:
SELECT * FROM test WHERE MATCH('@title hello @body world @ids 251')
对吗?
但是,我想做的实际上是 return 行 不 在 ids
列中包含特定 ID。这可能吗?
编辑:
我想我找到了答案,因为我从 "boolean expressions" 下找到的 SphinxQL 文档或类似的东西中分支出来,您可以简单地将确切的短语(或在本例中为数字)放在引号中,然后在前面打一个负号。
所以示例查询简单地变成:
SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"251"')
我认为它有效,但它没有。
如果我将不想匹配的ID从251
更改为11
,并且table中存在以下列:
-------------------------------
| title | body | ids |
-------------------------------
| hello | world | 5,111,87580 |
-------------------------------
然后这个查询:
SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"11"')
不是 return 那一行,因为 Sphinx 显然匹配“111”内部的“11”。
有我的conf设置:
index_field_lengths = 1
morphology = stem_en
min_word_len = 1
min_prefix_len = 1
prefix_fields = name
expand_keywords = 1
我从 SphinxQL 文档分支出来,发现在 "boolean expressions" 或类似的东西下,您可以简单地将确切的短语(或在本例中为数字)放在引号中,然后在前面放一个减号。
因此示例查询简单地变为:
SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"251"')
我测试了一下,好像可以用!
我想我会把问题留在这里,以防其他人发现它有用:-)