如何解决sphinxql 查询 mysql
如何通过 sphinxql 在 sphinx 中使用这样的查询?
SELECT t1.value_id,t1.option_id,COUNT(disTINCT t1.product_id) AS total
FROM table1 t1
LEFT JOIN table1 t11 ON (oov2p.product_id = oov2p1.product_id)
WHERE t11.option_id = 10012 AND t11.value_id IN (456105035,2199381524)
GROUP BY t1.option_id,t1.value_id
解决方法
Sphinx 不支持连接,因此在 Sphinx 中运行此查询并不容易。
,好吧,虽然 sphinx 本身不能在多个索引之间运行“连接”查询。
您可以在“sql_query”中使用“JOIN”,因此可以创建一个“预连接”的 sphinx 索引,以便可以运行这样的查询。
source mysource {
...
sql_query =
SELECT t1.product_id,t1.value_id,t11.option_id,GROUP_CONCAT(t11.value_id) as t11ids
FROM table1 t1
LEFT JOIN table1 t11 USING (product_id)
GROUP BY product_id
sql_attr_uint = option_id
sql_attr_multi = uint t11ids from field
这将允许您运行 sphinxQL 查询有点像......
sphinxQL> SELECT id,option_id,COUNT(DISTINCT product_id) AS total
FROM myindex
WHERE option_id = 10012 AND t11ids IN (456105035,2199381524)
GROUP BY option_id;
我已经简化了保存的确切属性,您的示例查询与来自多个表的 value 和 option_ids 有点混淆。 .. 所以它只是为了演示这个概念,而不是一个完整的例子。
关键点是您将要过滤或“分组依据”(或排序!)的任何列存储为索引中的实际属性,然后可以在 sphinxql 查询中使用它们!>
(注意特殊多值属性 (mva) 的使用,这是 Sphinx 的一个非常独特的概念,其中多个值存储在一行中,如 GROUP_CONCAT() 的输出)。但允许漂亮的复杂索引,当源表是一对多关系时,从“多”方存储值)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。