ФорумРазработкаБазы данных → Вопрос п sql

Вопрос п sql

  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 13 августа 2009 г. 2:54

    Есть таблица a(550 записей) и тблица b(350). В таблице а есть поля id и groupId(ид группы). Смысл в чем есть связь таблицы b и a по id, но нужно делать выборку всех id из таблицы а состоящих в группе(с таким же groupId). Я сделал вьюшку:

    SELECT a.id, b.name FROM table1 a, table2 b
    WHERE id b.IN
       (
           SELECT id FROM table2 WHERE groupId in
               (
                    SELECT groupId from table2 WHERE id=a.id
               )
       )
    OR a.id = b.id

    Смотрю я на это и кажется мне что это пиздетс. Если не задавать условия по поиску то запрос отрабатывается порядка 0,06….
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 13 августа 2009 г. 2:56, спустя 1 минуту 53 секунды

    Почему не JOIN?
    adw/0
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 13 августа 2009 г. 2:59, спустя 2 минуты 32 секунды

    потому что кол-во ид в группе может быть разным. от 2 и до 10. И всем этим id нужно присвоить свойство из таблицы a
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 13 августа 2009 г. 3:07, спустя 8 минут 37 секунд

    Baboot, не понял всеравно, почему не join? Какая разница сколько там может быть идов?
    adw/0
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 13 августа 2009 г. 5:26, спустя 2 часа 18 минут 26 секунд

    Я просто не пойму как тут это можно реализовать.
    сначала мне нужно получить idGroup из table2 оп id из table1;
    после этого нужно получить все ид из table2 по полученому idGroup;
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 13 августа 2009 г. 5:31, спустя 4 минуты 59 секунд

    select * from table1 as t1 inner join table1 as t2 on t1.group=t2.group where t2.id=10

    ну и дальше сам ..
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 13 августа 2009 г. 5:31, спустя 17 секунд

    Так не пойдет?


    SELECT `a`.`id`, `b`.`name`
     FROM `table2` as `b`
     LEFT JOIN `table1` as `a` using(`id`)
    adw/0
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 13 августа 2009 г. 5:32, спустя 50 секунд


    select * from table1 as t1 inner join table1 as t2 on t1.group=t2.group where t2.id=10

    ну и дальше сам ..

    Пасиб дюд. Ты как всегда ахуенен
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 13 августа 2009 г. 5:34, спустя 1 минуту 41 секунду

    Baboot, ну можешь эдворда вариант заюзать в моем)

    select * from table1 as t1 inner join table1 as t2 on using(group) where t2.id=10
    Сапожник без сапог
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 13 августа 2009 г. 5:34, спустя 23 секунды


    Так не пойдет?


    SELECT `a`.`id`, `b`.`name`
     FROM `table2` as `b`
     LEFT JOIN `table1` as `a` using(`id`)



    Немного не то… Ну никогда я не мог нормальным языком объяснить в чем задача, уебестая черта. using(`id`) - там нужно выдрать все id по ид групп, который еще надо получить. Спасибо за оперативность. Дюд дал направление. Ща осилю.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 13 августа 2009 г. 5:34, спустя 19 секунд

    подумалось вот. если бы я за каждое "спасибо" за день сказанное мне получал 50 рублей … в день бы выходило порядка 5000. как поступить? перестать помогать, или делать помощь платной?)
    Сапожник без сапог
  • md5

    Сообщения: 11948 Репутация: N Группа: в ухо

    Spritz 13 августа 2009 г. 5:35, спустя 48 секунд


    подумалось вот. если бы я за каждое "спасибо" за день сказанное мне получал 50 рублей … в день бы выходило порядка 5000. как поступить? перестать помогать, или делать помощь платной?)
    не будь мудаком
    все умрут, а я изумруд
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 13 августа 2009 г. 5:38, спустя 2 минуты 58 секунд


    подумалось вот. если бы я за каждое "спасибо" за день сказанное мне получал 50 рублей … в день бы выходило порядка 5000. как поступить? перестать помогать, или делать помощь платной?)

    делай в подписке донэйт
    50 с меня =)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 13 августа 2009 г. 5:38, спустя 23 часа 59 минут 44 секунды



    Так не пойдет?


    SELECT `a`.`id`, `b`.`name`
     FROM `table2` as `b`
     LEFT JOIN `table1` as `a` using(`id`)



    Немного не то… Ну никогда я не мог нормальным языком объяснить в чем задача, уебестая черта. using(`id`) - там нужно выдрать все id по ид групп, который еще надо получить. Спасибо за оперативность. Дюд дал направление. Ща осилю.
    не понимаю что ты хочешь, но думаю можешь добавить
    using(`id`) and x.id in (1,2,3)
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 13 августа 2009 г. 5:40, спустя 2 минуты 35 секунд

    adw0rd, я где то читал, что условия больше чем условия соединения таблиц в операторах жойна использовать муветон
    Спустя 28 сек.
    может ложь конечно)

    мне похуй, когда надо быстро сделать - пишу как получится запрос, когда вижу что надо сделать БЫСТРЫЙ запрос, приходится писать пиздецок запросы
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!