Zend Framework zend_db_select ЗАКАЗАТЬ - PullRequest
1 голос
/ 02 февраля 2010
    $select->where('MATCH(text,phone,phone2,email,email2,www,gadi,augums,skype) AGAINST(?)',$searching_string);
    $select->order('MATCH(text,phone,phone2,email,email2,www,gadi,augums,skype) AGAINST(?) DESC',$searching);

Получение ошибки:

Сообщение: SQLSTATE [HY093]: недопустимый номер параметра: параметры не были привязаны

Проблема появляется в строке с $ select-> order.

Это для релевантности в результатах. Как это должно выглядеть в Zend Framework?

И, похоже, проблема с поиском. Некоторые слова он ищет, а некоторые нет. Почему это так работает? : Z

Спасибо

1 Ответ

4 голосов
/ 03 февраля 2010

Я думаю, что вам нужно изменить оператор выбора так, чтобы часть MATCH AGAINST была перемещена из предложения order в список полей.

например,

вместо

SELECT *
FROM mytable
WHERE match(text,phone,phone2) AGAINST ('something')
ORDER BY match(text,phone,phone2) AGAINST ('something');

у вас будет

SELECT mytable.*, match(text,phone,phone2) AGAINST ('something') AS relevanceScore
FROM mytable
WHERE match(text,phone,phone2) AGAINST ('something')
ORDER BY relevanceScore DESC;

Итак, больше по вашему случаю ваш выбор будет выглядеть примерно как

$select->from('tableName',array('*','relevenceScore'=>$db->quoteInto('MATCH(text,phone,phone2,email,email2,www,gadi,augums,skype) AGAINST(?)',$searching_string));
$select->where('MATCH(text,phone,phone2,email,email2,www,gadi,augums,skype) AGAINST(?)',$searching_string);
$select->order('relevanceScore DESC');
...