2015-11-30 77 views
0

使用SphinxAPI在PHP篩選多到許多與斯芬克斯

int值我有2代表具有多對多關係經由第三個。玩家可以參加多個活動。

Gamers 
- id (UINT) 
- username (STRING) 
- category (UINT) 
- lat (FLOAT) 
- lng (FLOAT) 

Events 
- id (UINT) 
- name (STRING) 

gamers_events 
- gamer_id (UINT) 
- event_id (UINT) 

我看到關於MVA與獅身人面像,但我不知道這應該如何工作。

這是我在玩家指數

sql_query   = SELECT g.id\ 
          , g.username\ 
          , g.category\ 
         FROM gamer g\ 
         /* some LEFT JOIN with other tables */ 
         GROUP BY g.id 

sql_attr_multi  = uint event from query; SELECT id, name FROM event 

我不知道,看看如何加入事件表的玩家表。

我想在查找遊戲玩家時通過事件ID設置過濾器。不是由事件的名稱,只是ID。

回答

1

要麼..

sql_query = SELECT g.id, \ 
     GROUP_CONCAT(ge.event_id) AS event, \ 
     ... 
     FROM gamer g\ 
      LEFT JOIN gamers_events ge ON (ge.gamer_id = g.id) \ 
      /* some LEFT JOIN with other tables */ 
     GROUP BY g.id \ 
     ORDER BY NULL 
sql_attr_multi  = uint event from field; 

(獅身人面像從列中提取它)

OR(sql_query不變)...

sql_attr_multi  = uint event from query; SELECT gamer_id, event_id FROM gamers_events ORDER BY gamer_id 

你不需要在事件表可能情況下,只是gamers_events表。

+0

我去了concat,它完美的作品!這兩種方法之間有明顯的速度差異嗎?我期望主桌(玩家)擁有多達10.000個條目,每個條目有2-3個事件。我也做了另一個concat,但是這次帶有標籤,遊戲玩家每個都有大約5個標籤。 – Kalzem

+0

哦,順便說一句,爲什麼我應該把ORDER BY NULL? – Kalzem

+0

默認情況下,Mysql將按順序排序組中的結果。但獅身人面像不在意行的順序。所以允許mysql跳過'排序'步驟。通常這是一個很大的開銷,所以使查詢更快速運行:)不重要,只是一件好事。 (雖然mva查詢是否使用了這個應該有一個明確的命令!) – barryhunter