 |
|
mysql_result из запроса = странно
берем простой запрос
PHP код:
$q="SELECT COUNT(*) FROM owa_document ";
$h = mysql_query($q) or print mysql_error($h);
$result = mysql_result($h);
работает отлично,
берем запрос:
PHP код:
$q = "SELECT COUNT(*) FROM owa_document LEFT JOIN owa_request ON owa_request.document_id = owa_document.id WHERE owa_document.url = 'http://prozaru.com/2010/04/krasnyiy-mesyats-glava3/' GROUP BY owa_request.document_id, owa_request.document_id";
$h = mysql_query($q) or print mysql_error($h);
$result = mysql_result($h);
выдает ошибку supplied argument is not a valid MySQL result resource
причем в phpmyadmin - он корректно возвращает кол-во записей:
Код:
SET SQL_BIG_SELECTS =1;# MySQL вернула пустой результат (т.е. ноль строк).
# MySQL вернула пустой результат (т.е. ноль строк).
# MySQL вернула пустой результат (т.е. ноль строк).
SELECT COUNT( * )
FROM owa_document
LEFT JOIN owa_request ON owa_request.document_id = owa_document.id
WHERE owa_document.url = 'http://prozaru.com/2010/04/krasnyiy-mesyats-glava3/'
GROUP BY owa_request.document_id, owa_request.document_id
|
имхо в первом случае строка одна, и второй аргумент не требуется (хотя обязателен), а во втором - результат многострочный и требуется второй параметр - номер строки.
параметр дб линк на соединение, или без него (берется последнее активное), а у вас ресурс, что неправильно.
|
за подключения отвечает cms.
вообщем когда вместо LEFT JOIN поставил RIGHT JOIN (и даже INNER JOIN) заработало все. Видимо где-то косяк с LEFT JOIN и связке ON (хотя phpmyadmin понимал, но писал что полученны пустые строки вначале)
вот рабочий результат, переделал JOIN
PHP код:
$where1=get_permalink();
$q="SELECT COUNT(owa_document.id) FROM owa_document RIGHT JOIN owa_request ON owa_document.id = owa_request.document_id WHERE owa_document.url='".$where1."'";
#echo $q;
$h = mysql_query($q) or print mysql_error($h);
$result = mysql_result($h,0);
|
см. допустимый параметр к mysql_error. $h - это неправильный параметр (ресурс результата запроса), должен быть ресурс на соединение с MySQL, или пусто.
Цитата:
Цитата Djedai
Видимо где-то косяк с LEFT JOIN и связке ON »
|
нет никакого косяка, RIGHT JOIN работает аналогично LEFT JOIN.
Цитата:
The implementation of RIGHT JOIN is analogous to that of LEFT JOIN with the roles of the tables reversed.
|
|
как можно ускорить запрос?
поля индексные, char
|
а без join по where раз в 10 медленнее пашет, и часто уходило в даун таймаута
вот две таблицы и поля
owa_document.id = owa_request.document_id
|
Если со второй таблицы поля не нужны, то и связка не нужна. join служит только для связки, а никак не для оптимизации запроса.
|
Оптимизировал запрос (еле как)
Код:
$q="SELECT owa_request.visitor_id FROM owa_document, owa_request WHERE
owa_request.document_id=owa_document.id AND owa_document.url='".get_permalink()."'
в
Код:
$q= "SELECT DISTINCT owa_request.visitor_id
FROM owa_document INNER JOIN owa_request ON owa_document.id = owa_request.document_id
WHERE (((owa_document.url)='".get_permalink()."'));";
1. стал исполняться не 60секунд, а примерно 40секунд, можно ли его еще ускорить?
2. как сделать чтобы в итоге с этого запроса получать COUNT (записей) ?
|
проверьте индексы на owa_document.id owa_request.document_id и
owa_document.url
Цитата:
Цитата Djedai
2. как сделать чтобы в итоге с этого запроса получать COUNT (записей) ? »
|
если возвращаются строки, то mysql_num_rows (PHP), иначе SELECT SQL_CALC_FOUND_ROWS ... с последующим SELECT FOUND_ROWS()
|
Время: 17:59.
© OSzone.net 2001-