MySQL - mysql_result из запроса = странно

Ответить
Аватара пользователя
Djedai

MySQL - mysql_result из запроса = странно

Сообщение Djedai »

берем простой запрос



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
Аватара пользователя
Sham

Re: MySQL - mysql_result из запроса = странно

Сообщение Sham »

Цитата Djedai:



mysql_result($h);
MySQL - mysql_result из запроса = странно




имхо в первом случае строка одна, и второй аргумент не требуется (хотя обязателен), а во втором - результат многострочный и требуется второй параметр - номер строки.


Цитата Djedai:



mysql_error($h)
MySQL - mysql_result из запроса = странно




параметр дб линк на соединение, или без него (берется последнее активное), а у вас ресурс, что неправильно.
Аватара пользователя
Djedai

Re: MySQL - mysql_result из запроса = странно

Сообщение Djedai »

за подключения отвечает 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); 



Аватара пользователя
Sham

Re: MySQL - mysql_result из запроса = странно

Сообщение Sham »

Цитата Djedai:



mysql_error($h)
MySQL - mysql_result из запроса = странно




см. допустимый параметр к
mysql_error
. $h - это неправильный параметр (ресурс результата запроса), должен быть ресурс на соединение с MySQL, или пусто.
Цитата Djedai:



Видимо где-то косяк с LEFT JOIN и связке ON
MySQL - mysql_result из запроса = странно




нет никакого косяка, RIGHT JOIN работает аналогично LEFT JOIN.


Цитата:



The implementation of RIGHT JOIN is analogous to that of LEFT JOIN with the roles of the tables reversed.
Аватара пользователя
Djedai

Re: MySQL - mysql_result из запроса = странно

Сообщение Djedai »

как можно ускорить запрос?

поля индексные, char
Аватара пользователя
Djedai

Re: MySQL - mysql_result из запроса = странно

Сообщение Djedai »

EXPLAIN SELECT

http://dev.mysql.com/doc/refman/5.5/...g-explain.html


http://www.mysql.ru/docs/man/EXPLAIN.html



Цитата Djedai:



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."'
MySQL - mysql_result из запроса = странно




тут не нужен join, ибо не вижу полей со второй таблицы...
Аватара пользователя
Djedai

Re: MySQL - mysql_result из запроса = странно

Сообщение Djedai »

а без join по where раз в 10 медленнее пашет, и часто уходило в даун таймаута



вот две таблицы и поля

owa_document.id = owa_request.document_id
Аватара пользователя
Djedai

Re: MySQL - mysql_result из запроса = странно

Сообщение Djedai »

Если со второй таблицы поля не нужны, то и связка не нужна. join служит только для связки, а никак не для оптимизации запроса.
Аватара пользователя
Djedai

Re: MySQL - mysql_result из запроса = странно

Сообщение Djedai »

Оптимизировал запрос (еле как)



Код:

Код: Выделить всё

$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 (записей) ?
Аватара пользователя
Sham

Re: MySQL - mysql_result из запроса = странно

Сообщение Sham »

проверьте индексы на owa_document.id owa_request.document_id и

owa_document.url




Цитата Djedai:



2. как сделать чтобы в итоге с этого запроса получать COUNT (записей) ?
MySQL - mysql_result из запроса = странно




если возвращаются строки, то mysql_num_rows (PHP), иначе SELECT SQL_CALC_FOUND_ROWS ... с последующим SELECT FOUND_ROWS()
Ответить

Вернуться в «Программирование и базы данных»