У меня есть таблица, содержащей ежедневные подсчеты агентов пользователей ударяя мой сервер:Как РЕГИСТРИРУЙТЕСЬ на LIKE через Zend Framework 2
browser_stats_daily
+----+-------------+----------------------------------------------------------------------+--------------+
| id | access_date | user_agent | num_requests |
+----+-------------+----------------------------------------------------------------------+--------------+
| 6 | 2016-09-24 | Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) | 4729 |
| 10 | 2016-09-24 | Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko | 16396 |
| 12 | 2016-09-24 | Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko | 33623 |
| 17 | 2016-09-24 | MobileSafari/602.1 CFNetwork/808.0.2 Darwin/16.0.0 | 98 |
| 28 | 2016-09-24 | Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0) | 10333 |
| 33 | 2016-09-24 | Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko | 5745 |
| 34 | 2016-09-24 | Mozilla/5.0 (compatible; AhrefsBot/5.1; +http://ahrefs.com/robot/) | 5 |
| 46 | 2016-09-24 | Mozilla/5.0 (Windows NT 6.1; rv:49.0) Gecko/20100101 Firefox/49.0 | 339 |
| 51 | 2016-09-24 | - | 13 |
| 53 | 2016-09-24 | MobileSafari/601.1 CFNetwork/758.5.3 Darwin/15.6.0 | 38 |
+----+-------------+----------------------------------------------------------------------+--------------+
Я пытаюсь создать простой отчет о крупных/второстепенных версиях браузера - для это я таблица агента пользователя соответствует:
user_agents
+----+----------------+---------+----------+-------+-------+
| id | user_agent | vendor | platform | major | minor |
+----+----------------+---------+----------+-------+-------+
| 2 | %Firefox/38.0% | Mozilla | Firefox | 38 | 38.0 |
+----+----------------+---------+----------+-------+-------+
Я показал это может работать с запросом:
select distinct(bsa.user_agent), ua.vendor
from user_agents as ua
right join browser_stats_daily as bsa
on bsa.user_agent LIKE ua.user_agent
where ua.vendor is not null limit 10;
, который возвращает:
+----------------------------------------------------------------------------------------+---------+
| user_agent | vendor |
+----------------------------------------------------------------------------------------+---------+
| Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 | Mozilla |
| Mozilla/5.0 (Windows NT 5.1; rv:38.0) Gecko/20100101 Firefox/38.0 | Mozilla |
| Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 | Mozilla |
| Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 | Mozilla |
| Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0 | Mozilla |
| Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/38.0 Firefox/38.0; ADSSO | Mozilla |
| Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:38.0) Gecko/20100101 Firefox/38.0 | Mozilla |
| Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:38.0) Gecko/20100101 Firefox/38.0 | Mozilla |
+----------------------------------------------------------------------------------------+---------+
Но когда я пытаюсь использовать этот запрос с помощью Zend Framework в SQL TableGateway, я получаю сообщение об ошибке на LIKE
:
SQLSTATE[42000]: Syntax error or access violation:
1064 You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near
'`LIKE` `user_agents`.`user_agent` WHERE `user_agents`.`user_agent` IS NOT NULL'
Вот код, я использую, чтобы построить запрос:
$select = $this->tableGateway->getSql()->select();
$select->quantifier(Select::QUANTIFIER_DISTINCT);
$select->columns(array(
"user_agent",
));
$select->join(
"browser_stats_daily",
"browser_stats_daily.user_agent LIKE user_agents.user_agent",
Select::SQL_STAR,
Select::JOIN_RIGHT
);
$select->where->isNotNull("user_agents.user_agent");
return $this->tableGateway->selectWith($select);
Спасибо - в документации по API только говорится, что '' '' '' принимается за параметр '$ on', и я не смог найти ничего через google. – HorusKol