Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Как обединить запросы?


Автор: Syn 7.5.2008, 02:53
Всем привет!
ламерский вопрос (но не пинайте плиз)

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

пример:

имеем запросы (все в одну таблу)
Код

21: SELECT title FROM jos_categories WHERE id=8
22: SELECT title FROM jos_categories WHERE id=9
23: SELECT title FROM jos_categories WHERE id=17
24: SELECT title FROM jos_categories WHERE id=25
25: SELECT title FROM jos_categories WHERE id=24
26: SELECT title FROM jos_categories WHERE id=10
27: SELECT title FROM jos_categories WHERE id=20
28: SELECT title FROM jos_categories WHERE id=21
29: SELECT title FROM jos_categories WHERE id=22
30: SELECT title FROM jos_categories WHERE id=12
31: SELECT title FROM jos_categories WHERE id=28
32: SELECT title FROM jos_categories WHERE id=32
33: SELECT title FROM jos_categories WHERE id=30
34: SELECT title FROM jos_categories WHERE id=29
35: SELECT title FROM jos_categories WHERE id=27


как написать, чтоб одним запросом вытянуть сразу все эти id.

Автор: ksili 7.5.2008, 04:16
Код

SELECT title FROM jos_categories 
WHERE (id=8 or id=9 or id=17 or id=24 or id=25 or ....)

Автор: hollywood 7.5.2008, 05:45
Цитата(Syn @  7.5.2008,  02:53 Найти цитируемый пост)
как написать, чтоб одним запросом вытянуть сразу все эти id.

или так:
Код

SELECT title FROM jos_categories WHERE id IN (8, 9, 17, ...)

Автор: Syn 7.5.2008, 10:27
клёво  smile 
спасиб.

есть один нюанс...
id заранее мы не знаем.
эти id как раз и получает скрипт в запросе.

сейчас у меня запрос вот так написан

Код

if ($pg_id = $database->loadResult()) {
    $q    = "SELECT p.product_id, c.category_id, c.category_flypage ";
    $q .= "FROM #__".VM_TABLEPREFIX."_product AS p ";
    $q .= "INNER JOIN #__".VM_TABLEPREFIX."_product_category_xref AS x ";
    $q .= "ON p.product_id = x.product_id ";
    $q .= "INNER JOIN #__".VM_TABLEPREFIX."_category AS c ";
    $q .= "ON c.category_id = x.category_id ";
    $q .= "WHERE p.product_id = $pg_id";

    $database->setQuery($q);

    $row = null;

Автор: Syn 7.5.2008, 12:48
выше я написал не совсем полно и правильно, уж простите.
собсо вот что имеем:

Код

45: SELECT category_id, category_name,category_parent_id FROM jos_vm_category, jos_vm_category_xref WHERE jos_vm_category_xref.category_child_id='1' AND jos_vm_category.category_id='1'
46: SELECT category_id, category_name,category_parent_id FROM jos_vm_category, jos_vm_category_xref WHERE jos_vm_category_xref.category_child_id='2' AND jos_vm_category.category_id='2'
47: SELECT category_id, category_name,category_parent_id FROM jos_vm_category, jos_vm_category_xref WHERE jos_vm_category_xref.category_child_id='3' AND jos_vm_category.category_id='3'
48: SELECT category_id, category_name,category_parent_id FROM jos_vm_category, jos_vm_category_xref WHERE jos_vm_category_xref.category_child_id='4' AND jos_vm_category.category_id='4'
49: SELECT category_id, category_name,category_parent_id FROM jos_vm_category, jos_vm_category_xref WHERE jos_vm_category_xref.category_child_id='5' AND jos_vm_category.category_id='5'
50: SELECT category_id, category_name,category_parent_id FROM jos_vm_category, jos_vm_category_xref WHERE jos_vm_category_xref.category_child_id='14' AND jos_vm_category.category_id='14'
51: SELECT category_id, category_name,category_parent_id FROM jos_vm_category, jos_vm_category_xref WHERE jos_vm_category_xref.category_child_id='34' AND jos_vm_category.category_id='34'
52: SELECT category_id, category_name,category_parent_id FROM jos_vm_category, jos_vm_category_xref WHERE jos_vm_category_xref.category_child_id='32' AND jos_vm_category.category_id='32'
53: SELECT category_id, category_name,category_parent_id FROM jos_vm_category, jos_vm_category_xref WHERE jos_vm_category_xref.category_child_id='1' AND jos_vm_category.category_id='1'
54: SELECT category_id, category_name,category_parent_id FROM jos_vm_category, jos_vm_category_xref WHERE jos_vm_category_xref.category_child_id='33' AND jos_vm_category.category_id='33'
55: SELECT category_id, category_name,category_parent_id FROM jos_vm_category, jos_vm_category_xref WHERE jos_vm_category_xref.category_child_id='2' AND jos_vm_category.category_id='2'


вот код, который нужно поправить:

Код

function create_category_path($category_id) {
    global $database;

    $vmsefpath = '';
    do {
        $q = "SELECT category_id, category_name,category_parent_id FROM #__".VM_TABLEPREFIX."_category, #__".VM_TABLEPREFIX."_category_xref WHERE ";
        $q .= "#__".VM_TABLEPREFIX."_category_xref.category_child_id='$category_id' ";
        $q .= "AND #__".VM_TABLEPREFIX."_category.category_id='$category_id'";
        $database->setQuery($q);
        $database->loadObject($row);
        if ($row->category_parent_id) {
            $link = sefencode($row->category_name);
            $vmsefpath = '/'. $link. $vmsefpath;
        } else {
            $link = sefencode($row->category_name);
            $vmsefpath = $link . $vmsefpath;
        }
        $category_id = $row->category_parent_id;
    } while ($row->category_parent_id<>0);

    return $vmsefpath;
}

Автор: Deniz 7.5.2008, 13:25
Код

... WHERE 
  jos_vm_category_xref.category_child_id=jos_vm_category.category_id 
and 
  jos_vm_category.category_id in (1, 2, 3, 4, 5, ...)

Автор: Syn 7.5.2008, 14:26
не хочет такая конструкция работь.
и id может иметь любое произвольное число.

Автор: Deniz 8.5.2008, 05:20
Цитата(Syn @  7.5.2008,  17:26 Найти цитируемый пост)
не хочет такая конструкция работь.
и id может иметь любое произвольное число. 
Какая конструкция? Как не хочет? Что говорит? Что значит ID может иметь произвольное число? Ты же в скрипте формируешь запрос, там и напиши это "любое произвольное число".
Запрос с in можно оформить и с параметром, но это отдельный разговор.

Автор: Syn 8.5.2008, 10:34
Цитата

Код

... WHERE 
  jos_vm_category_xref.category_child_id=jos_vm_category.category_id 
and 
  jos_vm_category.category_id in (1, 2, 3, 4, 5, ...)


вот такая конструкция не хочет работать.

Цитата

Что значит ID может иметь произвольное число?

id может иметь целочисленное значение от 1 до бесконечности.
id это всего лишь идентификатор категории, товара и т.д.

Цитата

Ты же в скрипте формируешь запрос, там и напиши это "любое произвольное число".
Запрос с in можно оформить и с параметром, но это отдельный разговор.

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

Автор: Deniz 8.5.2008, 12:22
Цитата(Syn @  8.5.2008,  13:34 Найти цитируемый пост)
вот такая конструкция не хочет работать.
ты хочешь чтобы мы угадали почему? Что значит не хочет? Выдает не то или ошибка в запросе?

Автор: Syn 8.5.2008, 13:04
Цитата

ты хочешь чтобы мы угадали почему?

нет конечно.

Цитата

Что значит не хочет?

выдает не то.
в смысле неправильные ссылки получаются.
формирует http://site/.index.php

Автор: Magnifico 8.5.2008, 13:59
 у тебя в таблице jos_vm_category_xref  значения в  поле category_child_id :
1
2
3
4
...
и  в  таблице jos_vm_category  значения в поле category_id:
1
2
3
...
тебе нужно просто соединить таблицы
Код

 SELECT category_id, category_name, category_parent_id 
FROM  jos_vm_category as t1 ,   jos_vm_category_xref  as t2
WHERE    t2.category_child_id  =   t1.category_id

Автор: Syn 8.5.2008, 18:18
сенкс
ща испытаем

хоя...
врядли так будет работать.
это ведь id главных и дочерних категорий.

Автор: Syn 8.5.2008, 21:05
Цитата(Magnifico @ 8.5.2008,  13:59)
у тебя в таблице jos_vm_category_xref  значения в  поле category_child_id :
1
2
3
4
...
и  в  таблице jos_vm_category  значения в поле category_id:
1
2
3
...
тебе нужно просто соединить таблицы
Код

 SELECT category_id, category_name, category_parent_id 
FROM  jos_vm_category as t1 ,   jos_vm_category_xref  as t2
WHERE    t2.category_child_id  =   t1.category_id


таким макаром тоже не выходит  smile 

Автор: Magnifico 8.5.2008, 21:49

Цитата

таким макаром тоже не выходит


не выходит что? Эти запросы напрямую в базу надо вводить (твой скрипт тут не причем)
соответсвенно запрос должен возвращать или набор данных или сообщения об ошибках:
хотелось бы  увидеть то или другое !


Автор: Syn 8.5.2008, 23:08
возвращает данные, но неверные.
Цитата

не выходит что?

ссылки получаются вида http://site/.index.php

Цитата

(твой скрипт тут не причем)

как это скрипт не причем
скрипт тянет из базы все алиасы ссылок, которые есть на странице.

Автор: Deniz 12.5.2008, 06:06
Цитата(Syn @  9.5.2008,  02:08 Найти цитируемый пост)
возвращает данные, но неверные.
что значит неверные?
Приведи пример данных, запроса, что выдает и того, что хочешь получить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)