Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - mysql_result из запроса = странно

Ответить
Настройки темы
MySQL - mysql_result из запроса = странно

Пользователь


Сообщения: 131
Благодарности: 1

Профиль | Отправить PM | Цитировать


берем простой запрос
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

Отправлено: 07:37, 26-05-2010

 

Deadooshka


Сообщения: 2566
Благодарности: 698

Профиль | Отправить PM | Цитировать


Цитата Djedai:
mysql_result($h); »
имхо в первом случае строка одна, и второй аргумент не требуется (хотя обязателен), а во втором - результат многострочный и требуется второй параметр - номер строки.
Цитата Djedai:
mysql_error($h) »
параметр дб линк на соединение, или без него (берется последнее активное), а у вас ресурс, что неправильно.

Отправлено: 19:32, 26-05-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 131
Благодарности: 1

Профиль | Отправить PM | Цитировать


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


Отправлено: 21:39, 26-05-2010 | #3


Deadooshka


Сообщения: 2566
Благодарности: 698

Профиль | Отправить PM | Цитировать


Цитата Djedai:
mysql_error($h) »
см. допустимый параметр к 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.

Отправлено: 22:37, 26-05-2010 | #4


Пользователь


Сообщения: 131
Благодарности: 1

Профиль | Отправить PM | Цитировать


как можно ускорить запрос?
поля индексные, char

Отправлено: 22:54, 26-05-2010 | #5


Deadooshka


Сообщения: 2566
Благодарности: 698

Профиль | Отправить PM | Цитировать


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."' »
тут не нужен join, ибо не вижу полей со второй таблицы...

Отправлено: 23:07, 26-05-2010 | #6


Пользователь


Сообщения: 131
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

вот две таблицы и поля
owa_document.id = owa_request.document_id

Отправлено: 00:01, 27-05-2010 | #7


Deadooshka


Сообщения: 2566
Благодарности: 698

Профиль | Отправить PM | Цитировать


Если со второй таблицы поля не нужны, то и связка не нужна. join служит только для связки, а никак не для оптимизации запроса.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:28, 27-05-2010 | #8


Пользователь


Сообщения: 131
Благодарности: 1

Профиль | Отправить PM | Цитировать


Оптимизировал запрос (еле как)
Код: Выделить весь код
$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 (записей) ?

Последний раз редактировалось Djedai, 19-06-2010 в 14:22.


Отправлено: 14:07, 19-06-2010 | #9


Deadooshka


Сообщения: 2566
Благодарности: 698

Профиль | Отправить PM | Цитировать


проверьте индексы на 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()
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:17, 21-06-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - mysql_result из запроса = странно

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Оптимизация запроса venuko Вебмастеру 7 06-04-2009 00:11
Оптимизация запроса venuko Вебмастеру 7 27-02-2009 12:10
EventID - 560 странно... exo Устранение критических ошибок Windows 0 08-07-2008 12:44
странно, но почему? E-mail Вебмастеру 7 13-07-2006 13:04




 
Переход