[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ошибка при работе с классом ultimate mysql
udaff_es
добрый день:
вот мой скрипт:
PHP
<?php
include_once('include/class/mysql.class.php');
$db=new MySQL();
$city=array();
    
$query="SELECT * FROM Cuidades LIMIT 5";
    if (!
$db->Query($query)) $db->Kill();
    
$db->MoveFirst();
    while (!
$db->EndOfSeek())
    {
        
$row=$db->Row();
        if (
$db->Error()) echo $db->Error();
        
$db_temp=new  MySQL();
        
$q1="SELECT id FROM project WHERE project_city=$row->id";
        
$db_temp->Query($q1);
        
$num_project=($db_temp->RowCount()?$db_temp->RowCount():0);
        
$db_temp->Close();
        
$city[]=array ('id'=>$row->id'name'=>$row->cuidad_name'num'=>$num_project'check'=>0);
    }
    


при выполнении вылетает такая ошибка: Cannot read past the end of the records.

в базе две таблицы:
cuidades->id, name
projectos->id, project_city, и еще 6 полей.

не могу разобраться почему выскакивает эта ошибка. целый день копаюсь, может мелочь не замечаю?



Спустя 29 минут, 18 секунд (14.07.2009 - 18:45) pas написал(а):
Попробуйте заменить
PHP
$q1="SELECT id FROM project WHERE project_city=$row->id";

на
PHP
$q1="SELECT id FROM project WHERE project_city=".$row->id;

Спустя 2 часа, 46 минут, 22 секунды (14.07.2009 - 21:31) udaff_es написал(а):
Цитата (pas @ 14.07.2009 - 15:45)
Попробуйте заменить 
PHP
$q1="SELECT id FROM project WHERE project_city=$row->id";

на
PHP
$q1="SELECT id FROM project WHERE project_city=".$row->id;


пробовал-не помогает.

причем три иттерации отрабатывает на отлично, а вот на четвертой при отработке $db->Row() как бы теряет линк на ресурс.
не могу понять, это глюк класса или только у меня так?

Спустя 12 часов, 43 минуты, 56 секунд (15.07.2009 - 10:15) pas написал(а):
Ещё вопрос, не удобнее ли сделать внутренний подзапрос, типо :

PHP
$query="SELECT `Cuidades`.*, (SELECT sum(`project`.`id`) FROM `project` WHERE `project`.`project_city`=`Cuidades`.`id`) as numProject FROM `Cuidades` LIMIT 5";


Тогда использование дополнительных подключений в цикле возможно избежать
P.S. Нужно мнение экспертов, на мой взгляд запросы такого вида лучше использовать. Или я не прав?

Спустя 6 часов, 58 минут, 51 секунда (15.07.2009 - 17:14) kirik написал(а):
Цитата (pas @ 15.07.2009 - 02:15)
Тогда использование дополнительных подключений в цикле возможно избежать
P.S. Нужно мнение экспертов, на мой взгляд запросы такого вида лучше использовать. Или я не прав?

Отчасти прав, запросы в циклах нужно избегать... но не с использованием подзапросов smile.gif


udaff_es
Посмотри описание функции mysql_connect(). Там есть параметр (предпоследний) $new_link который нужно ставить в true, когда ты создаешь новое подключение при наличии старого. Скорее всего в этот класс такой параметр тоже можно передавать.. Может быть так: new MySQL(true)..
Кстати, зачем вообще создается новое подключение, причем в цикле?

Спустя 6 часов, 31 минута, 44 секунды (15.07.2009 - 23:45) udaff_es написал(а):
просто я не знаю как составить сложный запрос rolleyes.gif
там идет в цикле перебор городов, а затем в делается подзапрос на получения колличества проектов в этом городе. подскажите хорошую литературу по запросам.

Спустя 4 минуты, 34 секунды (15.07.2009 - 23:50) kirik написал(а):
Тут не нужен сложный запрос. Тут нужно хранить "количество проектов в городе" в отдельном поле в таблице городов, чтобы каждый раз не пересчитывать: id|city|projects_num.

Спустя 1 час, 12 минут, 35 секунд (16.07.2009 - 01:03) pas написал(а):
Цитата
просто я не знаю как составить сложный запрос

Ну запрос в данном случае не такой уж сложный (см. выше). Достаточно добавить подселект для подсчёта проектов.

Цитата
Тут не нужен сложный запрос. Тут нужно хранить "количество проектов в городе" в отдельном поле в таблице городов, чтобы каждый раз не пересчитывать: id|city|projects_num


По-моему это избыточность данных в БД. А если нам нужно добавить новый проект в каком-то городе, либо изменить город для проекта, то нам потребуется не забыть изменить значения projects_num? При использовании подзапросов, указанных в моём посте выше, это мы избегаем.

P.S. Я конечно не против денормализации данных в БД для ускорения работы, когда это нужно, но мне кажется в данном случае это не стоит того. Ну это моё сугубо личное мнение, решать разработчику =)

Спустя 1 час, 9 минут, 39 секунд (16.07.2009 - 02:12) kirik написал(а):
pas
В данном случае избыточность вполне оправдана и не является "денормализацией данных". Когда в таблице `project` будет больше 10к записей, и 200 юзеров одновременно будут использовать такую выборку с подзапросом, то серверу будет плохо smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.