2015-11-30 2 views
0

Использование SphinxAPI в PHPфильтр многие-ко-многим ИНТ значение с Sphinx

У меня есть 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 с Sphinx, но я не уверен, как это должно работать.

Это то, что я имею в индексе геймер

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 

Я не уверен, чтобы увидеть, как присоединиться к таблице событий в таблице игроков.

Я хотел бы установить SetFilter по 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; 

(сфинкс может извлечь его из колонки)

ИЛИ (sql_query без изменений) ...

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

Вам не нужно таблицы событий в любом случай, только таблица gamers_events.

+0

Я пошел на конкат, он отлично работает! Существует ли значительная разница в скорости между двумя методами? Я ожидаю, что у главного стола (геймеров) будет до 10.000 записей с 2-3 событиями каждый. Я также сделал еще один concat, но с тегами на этот раз, и геймеры имеют около 5 тегов. – Kalzem

+0

О, и кстати, почему я должен положить ORDER BY NULL? – Kalzem

+0

Mysql по умолчанию закажет результаты в группе по заказу. Но sphinx не заботится о том, какой порядок строк. Таким образом, mysql может пропустить шаг сортировки. Часто это большие накладные расходы, поэтому делает более быстрый запрос: не критично, просто приятно иметь. (хотя запрос mva, если он использовал, что СЛЕДУЕТ иметь явный порядок!) – barryhunter