Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Разработка и сопровождение сайтов (http://forum.sape.ru/forumdisplay.php?f=29)
-   -   SQL, подскажите плиз (http://forum.sape.ru/showthread.php?t=55579)

Русская мафия 15.07.2010 20:25

SQL, подскажите плиз
 
нужно сделать выборку, да так, чтоб в одном значении была не переменная, а массив. Делал примерно так:

SELECT f, gf, k, (SELECT sd, g FROM rgervc), kj FROM sdfg;

проблема в том, что всё нужно сделать одним запросом.

Возможно такое?

Anadonam 15.07.2010 20:49

нет так нельзя

до слова from должны быть константы (это имена полей для вывода)
то как сделал ты их количество будет неопределено

это делается чуть чуть подругому но надо чтобы таблицы sdfg и rgervc были связаны (что скорее всего так и есть) - вощем тебе надо узнать почему базы данных называются реляционными )..

если кратко)..


ps/ если чесно - ты самто хоть понял чего составил :D - ведь бред )..
эт всё жара наверно ..)

eresik 15.07.2010 20:56

Будет правильнее если ТС расскажет что он делает (задачу), тогда будет понятно как это можно сделать.

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

Но главное - я даже не могу представить когда такое может понадобиться :)

Русская мафия 15.07.2010 21:14

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

Добавлено через 1 минуту
вобщем пытался так:
PHP код:

$result mysql_query("SELECT product.*, spp.name as name_pic, spp.width, spp.height, spo.id_option, (SELECT spo2.value, opt2.title FROM shop_product_options as spo2, options as opt2), opt.title as title_opt , opt.type as type_opt , opt.if_select as if_select_opt, opt.filter_type as filter_type_opt, categ.id as categ_id, categ.alias as categ_alias, categ.title as categ_title
            FROM
                  shop_categs as categ,
                  shop_products as product,
                  shop_categ_products as scp,
                  site_shop_categ as ssc,
                  shop_product_pics as spp,
                  shop_product_options as spo,
                  options as opt
            WHERE
                  ssc.id_site = 1 AND
                  ssc.id_categ = categ.id AND
                  categ.id = scp.id_categ AND
                  scp.id_product = product.id AND
                  spp.id_product = product.id AND
                  (spp.width='100' or spp.height='100') AND
                  categ.id=1 AND 
          product.f_spec=1 AND
          product.active = 1 AND
                  spo.id_product = product.id AND
                  opt.show_in_list = 1 AND
                  opt.id = spo.id_option
                  GROUP by product.id
    "
); 


eresik 15.07.2010 21:49

В общем, если охота поизвращаться, то http://webi.ru/webi_articles/8_14_f.html

А "по нашему" - надо делать отдельными подзапросами.
У вас и так запрос "не слабый"

Кстати, у меня тоже вопрос.
Как проще всего обменять значения в двух строках?
idN значение1
idM значение2

надо поменять местами значение1 и значение2 в двух известных строках (для двух известных id).

Atomic 16.07.2010 03:08

сломался телепатический ментальный дебаггер на "для одного вывода", для одного запроса м.б?
так и в чем проблема?
while($res=mysql_fetch_assoc($result)) {
$res[..]
}

Русская мафия 16.07.2010 13:35

Цитата:

Сообщение от Atomic (Сообщение 862052)
для одного запроса м.б?

угу)

Цитата:

Сообщение от Atomic (Сообщение 862052)
while($res=mysql_fetch_assoc($result)) {
$res[..]
}

нужно всего один запрос сделать, чтоб получить что то такое:

PHP код:

$mas[0]=>1;
$mas[1]=>1;
$mas[2]=>2;
$mas[3]=>2;
$mas[4]=>$mas2[0]=>21;
        
$mas2[1]=>54;
        
$mas2[2]=>121;
               .....
$mas[5]=>1;
...... 


Artemon2010 16.07.2010 13:41

если принципиально 1 запрос и не важно сколько времени потом разбирать
SELECT f, gf, k, kj FROM sdfg
union
SELECT XXX as tag1,YYY as tag2, sd, g FROM rgervc ;

потом руками разобрать

XXX as tag1 - сколько надо добавиь по смыслу
фильтровать в ПХП по ним же
на MуSQL 3.1-3.2.х, кажется, не будет работать - там в UNION баг

Русская мафия 16.07.2010 13:43

Цитата:

Сообщение от eresik (Сообщение 861818)
В общем, если охота поизвращаться, то http://webi.ru/webi_articles/8_14_f.html

вооот оно!:)
то что нужно, спасибо)
Как и я пытался делать, только с групировкой:

PHP код:

SELECT DISTINCT `name` as `name1`, 
(
select GROUP_CONCAT(`pet`) as `petfrom `testwhere `name` = `name1` )as `pet`
FROM `test


Андрей Барыкин 17.07.2010 11:55

Цитата:

Сообщение от Русская мафия (Сообщение 861779)
нужно сделать выборку, да так, чтоб в одном значении была не переменная, а массив. Делал примерно так:

SELECT f, gf, k, (SELECT sd, g FROM rgervc), kj FROM sdfg;

проблема в том, что всё нужно сделать одним запросом.

Возможно такое?

Использовать хранимую функцию, если MySQL версии 5.0 и выше.
Ну или Union, как уже советовали.

Цитата:

Сообщение от eresik (Сообщение 861818)
Кстати, у меня тоже вопрос.
Как проще всего обменять значения в двух строках?
idN значение1
idM значение2

надо поменять местами значение1 и значение2 в двух известных строках (для двух известных id).

В чем, конкретно, проблема? Или вы чего-то по условиям не договариваете аля: без лишней переменной, одним запросом(правда не знаю, зачем это нужно). И зачем это вообще надо, задача какова?


Часовой пояс GMT +3, время: 16:41.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.