Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить запрос, из трех таблиц 
:(
    Опции темы
slang
Дата 2.8.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



Помогите составить запрос.
Есть таблицы (упрощенно, конечно):
Table_1 (user)
-id
-name
Table_2 (авто)
-id
-id_user
-auto
Table_3 (запрос)
-id
-id_user
-id_auto
-numzapros (номер запроса)
-date (дата формирования запроса)
-zapros


Требуется составить запрос, чтобы на выходе получить html типа:

Код

заголовок таблицы: auto(Table_2) - name(Table_1) - numzapros (Table_3)
строка с данными: zapros (Table_3)
строка с данными: zapros (Table_3)
строка с данными: zapros (Table_3)


у меня есть только мысля:
1. выбрать все разные numzapros сортируя их по дате
2. берем номер первого запроса
3. выбираем инфу по id_auto и id_user из соответствующих таблиц (сформировали первую строку)
4. выбираем все запросы с таким номером (сформировали строки с данными)
5. переходим к следующему номеру запроса
6. переходим к пункту 3

в этом случае получается 1+2*количество запросов (из пункта 1) запросов к базе данных.
из пункта 1 за месяц набирается около 1000 запросов, таким образом, примерно, через месяц для того чтобы сформировать такую страницу необходимо будет выполнить 2001 запрос к базе данных - многовато получается, не так ли?
Подскажите, как можно это реализовать по другом?


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
Fin
Дата 3.8.2007, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



А какие хоть логические связи в таблицах?


--------------------
Пролетал мимо.
PM MAIL   Вверх
slang
Дата 3.8.2007, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



Цитата(Fin @ 3.8.2007,  00:02)
А какие хоть логические связи в таблицах?

Table_1 (user)
-id (ключевое поле)
-name
Table_2 (авто)
-id
-id_user (связь с Table_1, поле id)
-auto
Table_3 (запрос)
-id
-id_user (связь с Table_1, поле id)
-id_auto (связь с Table_2, поле id)

-numzapros (номер запроса)
-date (дата формирования запроса)
-zapros

Это сообщение отредактировал(а) slang - 3.8.2007, 08:42


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
slang
Дата 3.8.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



у меня получается что-то на подобие этого:
Код

        $sql = "SELECT DISTINCT `numzapros` FROM " . $GLOBALS['table_zapros'] . " ORDER BY id";
        $result = DbQuery($sql);
        while ($temp = mysql_fetch_array($result, MYSQL_ASSOC)) {
            $zapros[] = $temp['numzapros'];
        }
        foreach ($zapros as $k=>$v)    {
            $sql = "SELECT `auto_id`, `user_id` FROM " . $GLOBALS['table_zapros'] . " WHERE `numzapros` = '" . $v . "' LIMIT 0,1";
            $result = DbQuery($sql);
            $temp = mysql_fetch_array($result, MYSQL_ASSOC);
            $sql = "SELECT * FROM " . $GLOBALS['table_account'] . " WHERE `id`=" . $temp['user_id'];
            $result = DbQuery($sql);
            $records = mysql_fetch_array($result, MYSQL_ASSOC);
            print "<BR>Запрос:" . $v . " заказчик: " . $records['name'];
            
            $sql = "SELECT * FROM " . $GLOBALS['table_auto'] . " WHERE `id`=" . $temp['auto_id'];
            $result = DbQuery($sql);
            $records = mysql_fetch_array($result, MYSQL_ASSOC);
            print " (автомобиль: " . $records['marka'] . " " . $records['model'] . ")";
            
            $sql = "SELECT * FROM " . $GLOBALS['table_zapros'] . " WHERE `numzapros` = '" . $v . "'";
            $result = DbQuery($sql);
            while ($temp = mysql_fetch_array($result, MYSQL_ASSOC)) {
                print "<BR>" . $temp['id'] . "/" . $temp['detalrus'];
            }
        }

сама бд:
Код

-- 
-- Структура таблицы `auto_auto`
-- 

CREATE TABLE `auto_auto` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `marka` varchar(20) NOT NULL default '',
  `model` varchar(20) NOT NULL default '',
  `nummark` varchar(20) NOT NULL default '',
  `drivetype` varchar(20) NOT NULL default '',
  `table` varchar(20) NOT NULL default '',
  `cuzov` varchar(14) NOT NULL default '',
  `typekpp` varchar(10) NOT NULL default '',
  `country` varchar(20) NOT NULL default '',
  `vin` varchar(20) NOT NULL default '',
  `year` varchar(4) NOT NULL default '',
  `month` char(2) NOT NULL default '',
  `abs` varchar(4) NOT NULL default '',
  `hidro` varchar(4) NOT NULL default '',
  `volume` varchar(5) NOT NULL default '',
  `privod` varchar(10) NOT NULL default '',
  `cond` varchar(4) NOT NULL default '',
  `rem` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='авто';

-- --------------------------------------------------------

-- 
-- Структура таблицы `auto_login`
-- 

CREATE TABLE `auto_login` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL default '',
  `login` varchar(10) NOT NULL default '',
  `pass` varchar(32) NOT NULL default '',
  `email` varchar(50) NOT NULL default '',
  `phone` varchar(12) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='аккаунт';

-- --------------------------------------------------------

-- 
-- Структура таблицы `auto_zapros`
-- 

CREATE TABLE `auto_zapros` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `auto_id` int(11) NOT NULL default '0',
  `gorod` varchar(20) NOT NULL default '',
  `numzapros` varchar(20) NOT NULL default '',
  `datezapros` date NOT NULL default '0000-00-00',
  `timezapros` time NOT NULL default '00:00:00',
  `dateend` date NOT NULL default '0000-00-00',
  `detaleng` varchar(100) NOT NULL default '',
  `detalrus` varchar(100) NOT NULL default '',
  `detalnumor` varchar(20) NOT NULL default '',
  `katalognumor` varchar(50) NOT NULL default '',
  `detalnumdubl` varchar(20) NOT NULL default '',
  `katalognumdubl` varchar(50) NOT NULL default '',
  `detaltype` varchar(20) NOT NULL default '',
  `sostzapros` varchar(20) NOT NULL default '',
  `rem` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='запросы';




--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
sTa1kEr
Дата 3.8.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 9
Всего: 146



slang, странная у вас структура базы. Почему бы вам не вынести детали запроса в отдельную таблицу? Т.е., к примеру, таблица
Код

CREATE TABLE `auto_addinfo` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `zapros` INTEGER UNSIGNED NOT NULL,
  `detaleng` VARCHAR(100) NOT NULL,
  `detalrus` VARCHAR(100) NOT NULL,
  -- итд остальные детали запроса
  PRIMARY KEY (`id`)
)
ENGINE = MyISAM
COMMENT = 'дополнительная информация';

Тогда запрос сразу станет предельно простым
Код

SELECT aa.`marka`, aa.`model`, al.`name`, az.`numzapros`, ad.`detalrus` FROM auto_zapros az
LEFT JOIN auto_auto aa ON aa.id=az.auto_id
LEFT JOIN auto_login al ON al.id=az.user_id
LEFT JOIN auto_addinfo ad ON az.numzapros = ad.zapros;

Или же, если я не правильно понял задачу, то можно пример данных таблицы auto_zapros?

Это сообщение отредактировал(а) sTa1kEr - 3.8.2007, 19:08
PM MAIL   Вверх
slang
Дата 3.8.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



sTa1kEr, так и есть, детали запроса в отдельной таблице, в ней же поля для связи с двумя другими таблицами.
пример таблиц:
Код

-- Структура таблицы `auto_auto`
-- 

CREATE TABLE `auto_auto` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `marka` varchar(20) NOT NULL default '',
  `model` varchar(20) NOT NULL default '',
  `nummark` varchar(20) NOT NULL default '',
  `drivetype` varchar(20) NOT NULL default '',
  `table` varchar(20) NOT NULL default '',
  `cuzov` varchar(14) NOT NULL default '',
  `typekpp` varchar(10) NOT NULL default '',
  `country` varchar(20) NOT NULL default '',
  `vin` varchar(20) NOT NULL default '',
  `year` varchar(4) NOT NULL default '',
  `month` char(2) NOT NULL default '',
  `abs` varchar(4) NOT NULL default '',
  `hidro` varchar(4) NOT NULL default '',
  `volume` varchar(5) NOT NULL default '',
  `privod` varchar(10) NOT NULL default '',
  `cond` varchar(4) NOT NULL default '',
  `rem` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='авто' AUTO_INCREMENT=3 ;

-- 
-- Дамп данных таблицы `auto_auto`
-- 

INSERT INTO `auto_auto` VALUES (1, 1, 'Toyota', 'Camry', '', '', '', '---', '---', '', '', '1995', '6', '---', '---', '', '---', '---', '            ');
INSERT INTO `auto_auto` VALUES (2, 2, 'BMW', 'uyih huik', '', '', '', '---', '---', '', '', '', '', '---', '---', '', '---', '---', '            ');

-- --------------------------------------------------------

-- 
-- Структура таблицы `auto_login`
-- 

CREATE TABLE `auto_login` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL default '',
  `login` varchar(10) NOT NULL default '',
  `pass` varchar(32) NOT NULL default '',
  `email` varchar(50) NOT NULL default '',
  `phone` varchar(12) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='аккаунт' AUTO_INCREMENT=3 ;

-- 
-- Дамп данных таблицы `auto_login`
-- 

INSERT INTO `auto_login` VALUES (1, 'Петров Петр', 'slang', '86792d8c65e64206d662b7c177b23105', '[email protected]', '0959412222');
INSERT INTO `auto_login` VALUES (2, 'Иванов Иван Иванович', 'ivan', '2c42e5cf1cdbafea04ed267018ef1511', '[email protected]', '9042838909');

-- --------------------------------------------------------

-- 
-- Структура таблицы `auto_zapros`
-- 

CREATE TABLE `auto_zapros` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `auto_id` int(11) NOT NULL default '0',
  `gorod` varchar(20) NOT NULL default '',
  `numzapros` varchar(20) NOT NULL default '',
  `datezapros` date NOT NULL default '0000-00-00',
  `timezapros` time NOT NULL default '00:00:00',
  `dateend` date NOT NULL default '0000-00-00',
  `detaleng` varchar(100) NOT NULL default '',
  `detalrus` varchar(100) NOT NULL default '',
  `detalnumor` varchar(20) NOT NULL default '',
  `katalognumor` varchar(50) NOT NULL default '',
  `detalnumdubl` varchar(20) NOT NULL default '',
  `katalognumdubl` varchar(50) NOT NULL default '',
  `detaltype` varchar(20) NOT NULL default '',
  `sostzapros` varchar(20) NOT NULL default '',
  `rem` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='запросы' AUTO_INCREMENT=13 ;

-- 
-- Дамп данных таблицы `auto_zapros`
-- 

INSERT INTO `auto_zapros` VALUES (1, 1, 1, 'Омск', 'Инт-1', '2007-08-02', '12:37:02', '2007-08-02', '', 'крыло левое', '', 'Toyota', '', '', 'Любая', 'не определено', '');
INSERT INTO `auto_zapros` VALUES (2, 1, 1, 'Омск', 'Инт-1', '2007-08-02', '12:37:07', '2007-08-02', '', 'крыло правое', '', 'Toyota', '', '', 'Любая', 'не определено', '');
INSERT INTO `auto_zapros` VALUES (3, 1, 1, 'Омск', 'Инт-1', '2007-08-02', '12:37:12', '2007-08-02', '', 'фара левая', '', 'Toyota', '', '', 'Любая', 'не определено', '');
INSERT INTO `auto_zapros` VALUES (4, 1, 1, 'Омск', 'Инт-1', '2007-08-02', '12:37:17', '2007-08-02', '', 'фара правая', '', 'Toyota', '', '', 'Любая', 'не определено', '');
INSERT INTO `auto_zapros` VALUES (5, 1, 1, 'Омск', 'Инт-2', '2007-08-02', '13:36:48', '2007-08-02', '', 'корпус печки', '', '', '', '', 'Любая', 'не определено', '');
INSERT INTO `auto_zapros` VALUES (6, 2, 2, 'Омск', 'Инт-3', '2007-08-03', '23:06:31', '2007-08-03', '', 'деталь 1', '', 'BMW', '', '', 'Любая', 'не определено', '');
INSERT INTO `auto_zapros` VALUES (7, 2, 2, 'Омск', 'Инт-3', '2007-08-03', '23:06:39', '2007-08-03', '', 'деталь 5', '', 'BMW', '', '', 'Любая', 'не определено', '');
INSERT INTO `auto_zapros` VALUES (8, 2, 2, 'Омск', 'Инт-3', '2007-08-03', '23:06:48', '2007-08-03', '', 'крыло', '', 'BMW', '', '', 'Любая', 'не определено', '');
INSERT INTO `auto_zapros` VALUES (9, 2, 2, 'Омск', 'Инт-4', '2007-08-03', '23:07:10', '2007-08-03', '', 'фара', '', 'BMW', '', '', 'Любая', 'не определено', '');
INSERT INTO `auto_zapros` VALUES (10, 2, 2, 'Омск', 'Инт-5', '2007-08-03', '23:15:10', '2007-08-03', '', 'фара', '', 'BMW', '', '', 'Любая', 'не определено', '');
INSERT INTO `auto_zapros` VALUES (11, 2, 2, 'Омск', 'Инт-6', '2007-08-03', '23:15:17', '2007-08-03', '', 'фара', '', 'BMW', '', '', 'Любая', 'не определено', '');
INSERT INTO `auto_zapros` VALUES (12, 2, 2, 'Омск', 'Инт-7', '2007-08-03', '23:15:19', '2007-08-03', '', 'фара', '', 'BMW', '', '', 'Любая', 'не определено', '');
        

Мне вот еще интересно, как правильнее, загонять все таблицы в массив одним запросом, или делать множество запросов. Как быстрее и легче системе?

Это сообщение отредактировал(а) slang - 3.8.2007, 20:45


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0977 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.