Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Не относится к теме топика (Zav_park)
Author Message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Mar 26, 2007 4:33 pm ()
   Post subject:
Reply with quote


М

Выделено из темы «DbSimple v2.x: лаконичная работа с различными СУБД»,
расположенной в форуме Конструктор (27 Марта 2007, 23:48).
Back to top
View user's profile Send private message Send e-mail
Zav_park
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Mar 26, 2007 4:33 pm (спустя 1 секунду; написано за 10 минут 44 секунды)
   Post subject:
Reply with quote

Может и глупость конечно но хотелось-бы такого функционала:

$db->select('
    -- EXPLAIN `user_id` SELECT `name`, `ratio` FROM ?_users AS `user`
    -- EXPLAIN `rubric_id` SELECT `title`, `text` FROM ?_rubrics AS `rubric`
    SELECT `id` AS ARRAY_KEY, `title`, `text` FROM ?_news WHERE `rubric_id` = ? LIMIT 10
');

Чтобы развернулось в такой запрос

    SELECT ?_news.`id` AS ARRAY_KEY, ?_news.`title`, ?_news.`text`,
        ?_users.`name` AS `user_name`, ?_users.`ratio` AS `user_ratio`,
        ?_rubrics.`title` AS `rubric_title`, ?_rubrics.`text` AS `rubric_text`
    FROM ?_news
    LEFT JOIN ?_users ON `user_id`
    LEFT JOIN ?_rubrics ON `rubric_id`
    WHERE ?_news.`rubric_id` = ? LIMIT 10

И в результате получить такой объект в пхп

    Array {
        [10] => Array {
                'title' => 'News id 10 title',
                'text' => 'News id 10 text',
                'user' => Array {
                        'name' => 'News id 10 Author name',
                        'ratio' => 'News id 10 Author ratio'
                        }
                'rubric' => Array {
                            'title' => 'News id 10 Rubric title',
                            'text' => 'News id 10 Rubric text'
                            }
                }
        }
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Mar 26, 2007 11:33 pm (спустя 7 часов 18 секунд; написано за 27 секунд)
   Post subject:
Reply with quote

Zav_park
Это задача более высокого слоя абстракции, граничит с идеологией ORM.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Tue Mar 27, 2007 11:55 am (спустя 12 часов 22 минуты; написано за 1 минуту 30 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Zav_park
Это задача более высокого слоя абстракции, граничит с идеологией ORM.
согласен где-то рядом, но не совсем :)

так это да, будет, или нафик ненада?
Back to top
dyadyavasya
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Mar 27, 2007 3:21 pm (спустя 3 часа 25 минут; написано за 4 минуты 11 секунд)
   Post subject:
Reply with quote

Полдня бьюсь, то ли торможу, то ли действительно что-то не так. Перекапал весь форум, но ничего похожего не нашел.
Работаю с DBSimple для выборки связанного дерева. Есть таблица:
Code (SQL): скопировать код в буфер обмена
CREATE TABLE `company` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent` int(11) DEFAULT NULL,
  `company_desc` varchar(250) NOT NULL DEFAULT '',
  PRIMARY KEY  (`id`),
  KEY `parent` (`parent`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=8 ;

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

INSERT INTO `company` VALUES (1, NULL, 'Travel Group');
INSERT INTO `company` VALUES (2, 1, 'Санкт-Петербуржский филиал');
INSERT INTO `company` VALUES (3, 1, 'Московский филиал');
INSERT INTO `company` VALUES (4, 2, 'Администрация');
INSERT INTO `company` VALUES (5, 2, 'Отдел маркетинга и развития');
INSERT INTO `company` VALUES (6, NULL, 'Coca Cola');
INSERT INTO `company` VALUES (7, 6, 'Санкт-Петербург');
Соответственно пишу из нее выборку через DBSimple:
Code (php): скопировать код в буфер обмена
$company_forest = $DB->select('SELECT id  AS ARRAY_KEY, parent AS PARENT_KEY, * FROM company WHERE id=?', 1);
- не работает, ругается на *.
Code (php): скопировать код в буфер обмена
$company_forest = $DB->select('SELECT id  AS ARRAY_KEY, parent AS PARENT_KEY, company.* FROM company WHERE id=?', 1);
- работает, но массив в котором должны содержаться данные по дереву (childNodes) - пустой и все мои попытки утыкаются в этот пустой массив. Что не так?

Версия DBSimple - @version 2.x $Id: Generic.php 172 2007-03-10 13:37:51Z dk $
Back to top
Дмитрий Агафонов
Заглянувший



Joined: 18 Jul 2006
Posts: 5
Карма: 0
   поощрить/наказать

Location: Саратов

PostPosted: Tue Mar 27, 2007 4:23 pm (спустя 1 час 1 минуту; написано за 5 минут 44 секунды)
   Post subject:
Reply with quote

dyadyavasya wrote:
Code (php): скопировать код в буфер обмена
$company_forest = $DB->select('SELECT id  AS ARRAY_KEY, parent AS PARENT_KEY, company.* FROM company WHERE id=?', 1);
Условие WHERE id=1 из вашего дерева не оставило один "корешок" случаем?
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Tue Mar 27, 2007 4:28 pm (спустя 5 минут; написано за 6 минут 29 секунд)
   Post subject:
Reply with quote

Дмитрий Агафонов wrote:
dyadyavasya wrote:
Code (php): скопировать код в буфер обмена
$company_forest = $DB->select('SELECT id  AS ARRAY_KEY, parent AS PARENT_KEY, company.* FROM company WHERE id=?', 1);
Условие WHERE id=1 из вашего дерева не оставило один "корешок" случаем?
Если посмотреть на базу, то видно, что у записи с id=1 два дитя, у одного из них, сответственно, еще два.
Back to top
Никита Косолaпов
Участник форума



Joined: 08 Aug 2006
Posts: 172
Карма: 9
   поощрить/наказать

Location: Москва

PostPosted: Tue Mar 27, 2007 6:33 pm (спустя 2 часа 4 минуты; написано за 39 секунд)
   Post subject:
Reply with quote

не путаете ли поля id и parent?
запись с id=1 в базе одна всего.
Back to top
View user's profile Send private message Send e-mail
Dmitry Shamin
Заглянувший



Joined: 27 Mar 2007
Posts: 0
Карма: 0
   поощрить/наказать


PostPosted: Wed Mar 28, 2007 8:13 am (спустя 13 часов 40 минут; написано за 1 минуту 24 секунды)
   Post subject:
Reply with quote

Никита Косолaпов wrote:
не путаете ли поля id и parent?
запись с id=1 в базе одна всего.
Да при любом расскладе, хоть id=1, хоть parent=1, хоть другие числа, массив, который должен содержать детей - пустой.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML