首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sphinxql查询mysql

sphinxql查询mysql
EN

Stack Overflow用户
提问于 2021-04-30 02:47:07
回答 2查看 35关注 0票数 0

如何通过sphinxql在sphinx中使用这样的查询?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2021-04-30 11:22:52

Sphinx不支持连接,所以在Sphinx中没有简单的方法来运行这个查询。

票数 0
EN

Stack Overflow用户

发布于 2021-04-30 21:45:40

嗯,虽然sphinx本身不能在多个索引之间运行'join‘查询。

您可以在'sql_ query‘中使用'JOIN’,这样就可以创建一个'prejoined‘的sphinx索引,这样就可以运行这样的查询。

代码语言:javascript
复制
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查询……

代码语言:javascript
复制
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;

我已经简化了保存的确切属性,您的示例查询与来自多个表的值和option_ids有点混淆。。。所以这只是一个概念的演示,而不是一个完整的例子。

关键的一点是你要存储任何你想要过滤的列或者'group by‘(或者order!)作为索引中的实际属性,然后可以在sphinxql查询中使用它们!

(注意特殊的多值属性(mva)的使用,这是Sphinx独有的概念,其中多个值存储在一行中,就像GROUP_CONCAT()的输出一样。但允许相当复杂的索引,当源表是一对多关系时,存储“多”端的值)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67323407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档