Mam stół z ma wiele tabel:

company
id | name
---------
1  | a
2  | b
3  | c
company_address
id | company_id |         latitude |        longitude |
-------------------------------------------------------
1  |           1|0.9684982117632206|1.1395506188216191|
2  |           1|0.7874478257111129|0.6816976456543681|
3  |           2|0.9758854923552117| 0.744264348306201|
4  |           2|0.7860300249465478|0.6804121583003967|
5  |           2|0.7874478257111129|0.6816976456543681|
6  |           3|0.9684982117632206|1.1395506188216191|

sql_attr_multi Nie obsługuj pola typu float, sql_joined_field zostało usunięte. Jak mogę rozwiązać ten problem? Może są rozwiązania oprócz grupy_concat ()?

0
user2772197 16 styczeń 2020, 11:11

1 odpowiedź

Najlepsza odpowiedź

Myślę, że twoje najłatwiejsze byłoby zorganizować adresy dokumentów Sfinksa, a nie ściśle firmę. I.E. Unikalny identyfikator dokumentu to identyfikator tabeli adresów. company_address.id

Utrzymuj identyfikator firmy jako atrybut, więc może grupować, jeśli naprawdę chcę tylko jednego wyniku na firmę.

sql_query = SELECT a.*, c.name FROM company_address a INNER JOIN company c ON (c.id = company_id) 
sql_attr_uint = company_id
sql_attr_float = latitude
sql_attr_float = longitude

Następnie GEODIST będzie pracować bezpośrednio bezpośrednio ...

SELECT *, GEODIST(0.659298124, -2.136602399, latitude, longitude) AS distance 
   FROM addressIndex WHERE distance < 10000 GROUP BY company_id;

Lub jeśli chcesz każdej firmy, nie zawierać GROUP BY.

Nazwa firmy jest nadal zawarta jako pole do wyszukiwania pełnotekstowego.

2
greybeard 13 grudzień 2020, 11:38