Выборка из mysql и сравнение значений PHP

iqmaker
На сайте с 17.04.2012
Offline
309
#41
Ilekor:
Долго делал различные способы.
Создал все по методу http://stackoverflow.com/questions/9703762/libpuzzle-indexing-millions-of-pictures
Есть сигнатуры, есть сигнатуры разделенные на слова.

Как теперь сделать запрос mysql на выборку похожих ?

К примеру имеем переменную с сигнатурой
$sig = "сигнатура"

Я так понимаю если вы делали как в примере, то выборка там производится след, образом, мне проверить не на чем:


SELECT i.*, COUNT(isw.sig_word) as strength FROM images i JOIN img_sig_words isw ON i.image_id = isw.image_id JOIN img_sig_words isw_search ON isw.sig_word = isw_search.sig_word AND isw.image_id != isw_search.image_id WHERE isw_search.image_id = $image_id GROUP BY i.image_id, i.name, i.description, i.file_path, i.url_path, i.signature ORDER BY strength DESC
Ilekor
На сайте с 22.04.2009
Offline
138
#42
iqmaker:
Я так понимаю если вы делали как в примере, то выборка там производится след, образом, мне проверить не на чем:

SELECT i.*, COUNT(isw.sig_word) as strength FROM images i JOIN img_sig_words isw ON i.image_id = isw.image_id JOIN img_sig_words isw_search ON isw.sig_word = isw_search.sig_word AND isw.image_id != isw_search.image_id WHERE isw_search.image_id = $image_id GROUP BY i.image_id, i.name, i.description, i.file_path, i.url_path, i.signature ORDER BY strength DESC

Я пробовал этот способ, не хватает времени для выполнения + mysql при таком запросе проц грузит на 100%.

Составил вот такой запрос

SELECT DISTINCT i.id, i.images FROM img_sig_words isw LEFT JOIN img_images i ON isw.image_id=i.id WHERE sig_word IN ('{$comma_words}')

Но чет пустой результат возвращает, хотя такие слова есть в базе, непонятно :(

Лучший дорген 21 века AgDor(http://agdor.info)
Ilekor
На сайте с 22.04.2009
Offline
138
#43

Все получилось, сделал поиск похожих изображений по базе

Нужно получить сигнатуру, потом сигнатуру разобрать на слова. Слова собрать для выполнения запроса


// разберем массив для поиска
$comma_words = implode("','", $sig_word);

$sql_select = "SELECT DISTINCT i.* FROM " . PREFIX . "_sig_words isw LEFT JOIN " . PREFIX . "_images i ON isw.image_id=i.id WHERE sig_word IN ('".$comma_words."')";
iqmaker
На сайте с 17.04.2012
Offline
309
#44
Ilekor:
Все получилось

Слава небесам :)) Я рад

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий