[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Добавить в MySQL кусок аналогичной.
Joliat
Подскажите пожалуйста, как можно добавить (дописать) в переменную, содержащую определенную выборку из mySQL часть такой же выборки, но только с другими параметрами?

Если не понятно объяснился, то вот пример:
$sql_1 - содержит одну выборку
$sql_2 -содержит - другую, но с теми же полями.

Как сделать чтоб $sql содержала в начале $sql_1 и после сруза $sql_2 ?

Если можно, то отвечайте по конкретнее, то я не силен в php и mysql, но очень нужно!!



Спустя 7 минут, 4 секунды (29.04.2011 - 09:06) Oyeme написал(а):
Используйте Union

SELECT column_name(s) FROM table_name1
UNION
SELECT
column_name(s) FROM table_name2

Спустя 1 час, 11 минут, 39 секунд (29.04.2011 - 10:17) Joliat написал(а):
прочитал про эту функцию, вроде все как мне нужно, но как ее реализовать в моем случае?

Я имею такой кусок кода:
				if (get_option('wpsc_sort_by')=='name') {
$order_by = "`".WPSC_TABLE_PRODUCT_LIST."`.`name` $order";
} else if (get_option('wpsc_sort_by') == 'price') {
$order_by = "`".WPSC_TABLE_PRODUCT_LIST."`.`price` $order";
} elseif(get_option('wpsc_sort_by') == 'dragndrop'){
$order_by = "`".WPSC_TABLE_PRODUCT_ORDER."`.`order` ASC";
}else {
if( $order == 'ASC'){
$order = 'DESC';
}else{
$order = 'ASC';
}

$order_by = "`".WPSC_TABLE_PRODUCT_LIST."`.`quantity`>'0' DESC";
}

$rowcount = $wpdb->get_var("SELECT COUNT( DISTINCT `".WPSC_TABLE_PRODUCT_LIST."`.`id`) AS `count` FROM `".WPSC_TABLE_PRODUCT_LIST."`,`".WPSC_TABLE_ITEM_CATEGORY_ASSOC."` WHERE `".WPSC_TABLE_PRODUCT_LIST."`.`publish`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`active`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_ITEM_CATEGORY_ASSOC."`.`product_id` $no_donations_sql $group_sql");

if(!is_numeric($products_per_page) || ($products_per_page < 1)) { $products_per_page = $rowcount; }
if($startnum >= $rowcount) {
$startnum = 0;
}

$sql = "SELECT DISTINCT `".WPSC_TABLE_PRODUCT_LIST."`.*, `".WPSC_TABLE_PRODUCT_ORDER."`.`order` FROM `".WPSC_TABLE_PRODUCT_LIST."`
LEFT JOIN `"
.WPSC_TABLE_ITEM_CATEGORY_ASSOC."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_ITEM_CATEGORY_ASSOC."`.`product_id`
LEFT JOIN `"
.WPSC_TABLE_PRODUCT_ORDER."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_PRODUCT_ORDER."`.`product_id`

WHERE `"
.WPSC_TABLE_PRODUCT_LIST."`.`publish`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`active`='1' $no_donations_sql $group_sql
GROUP BY`".WPSC_TABLE_PRODUCT_LIST."`.`id` DESC
ORDER BY `"
.WPSC_TABLE_PRODUCT_LIST."`.`special`, $order_by LIMIT $startnum, $products_per_page";



где $sql - выборка товаров из mysql.
Мне нужно их отсортировать, чтоб первые в списке были те, которые добавленные последние. `id` - это id товара.
За всем списком должны идти товары уже купленные (у купленных товаров `quantity`='0').

При исполнении php кода выше получаю первыми товары те, которые добавлены первыми, и последние- которые добавлены последними, а за ними - купленные.

Хотел реализовать свою задумку делая Выборку всех пунктов у которых идет возрастание по `id`, а после - у которых `quantity`='0' при помощи Вашей подсказки UNION. Но ничего не получилось.

Может просто есть способ как развернуть список `id`, чтоб не объединять пункты? DESC и ASC не помогают - они только влияют на размещение купленных товаров (перемещая их то в конец, то в начало списка, а расположение последних добавленных товаров так и остается перевернутым).


Надеюсь все доступно попытался рассказать.
Помогите, пожалуйста!

Спустя 43 минуты, 49 секунд (29.04.2011 - 11:01) Oyeme написал(а):
Цитата
Мне нужно их отсортировать, чтоб первые в списке были те, которые добавленные последние. `id` - это id товара.
За всем списком должны идти товары уже купленные (у купленных товаров `quantity`='0').

1.Делаете один запрос,где в условии ставите WHERE quantity<> 0 order by desc
Это у вас будет 1 выборка с последними добавленными товарами.
2.Делаете ту же выборку только с условиями WHERE quantity = 0
3 Используйте UNION
Так как у вас одна и та же таблица и поля. Вы просто склеиваете их вместе.
По перовой выборке у Вас идут все последние добавленные товары,но не купленные.
По второй выборке у вас идут купленные.

1 запрос UNION 2 запрос


"последнии добалвенные товары" - в Вашем случаи это не условия.Для этого используют время.

В вашем случаи все товары последние - которые не были куплены.
Или показать 10 последних не купленных товаров + показать купленные.

Спустя 23 минуты, 5 секунд (29.04.2011 - 11:24) Joliat написал(а):
Спасибо! Все верно! По отдельности они (2 условия работают идеально), но в каком именно месте стоит вставить UNION , при этом какое кол-во вовычек, скобок необходимо? Прошу прошения, но с БД имею дело только порядка 5-7 дней (еще полный НОЛЬ) :( .

Вот первое условие:
				$sql = "SELECT DISTINCT `".WPSC_TABLE_PRODUCT_LIST."`.*, `".WPSC_TABLE_PRODUCT_ORDER."`.`order` FROM `".WPSC_TABLE_PRODUCT_LIST."`
LEFT JOIN `"
.WPSC_TABLE_ITEM_CATEGORY_ASSOC."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_ITEM_CATEGORY_ASSOC."`.`product_id`
LEFT JOIN `"
.WPSC_TABLE_PRODUCT_ORDER."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_PRODUCT_ORDER."`.`product_id`
WHERE `"
.WPSC_TABLE_PRODUCT_LIST."`.`publish`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`active`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`quantity`<>'0' $no_donations_sql $group_sql ORDER BY `".WPSC_TABLE_PRODUCT_LIST."`.`special`, $order_by LIMIT $startnum, $products_per_page";


Вот второе:
				$sql = "SELECT DISTINCT `".WPSC_TABLE_PRODUCT_LIST."`.*, `".WPSC_TABLE_PRODUCT_ORDER."`.`order` FROM `".WPSC_TABLE_PRODUCT_LIST."`
LEFT JOIN `"
.WPSC_TABLE_ITEM_CATEGORY_ASSOC."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_ITEM_CATEGORY_ASSOC."`.`product_id`
LEFT JOIN `"
.WPSC_TABLE_PRODUCT_ORDER."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_PRODUCT_ORDER."`.`product_id`
WHERE `"
.WPSC_TABLE_PRODUCT_LIST."`.`publish`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`active`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`quantity`='0' $no_donations_sql $group_sql ORDER BY `".WPSC_TABLE_PRODUCT_LIST."`.`special`, $order_by LIMIT $startnum, $products_per_page";


А где нужно что дописать, чтоб получить *симбиоз*?

Спустя 6 минут, 35 секунд (29.04.2011 - 11:31) Oyeme написал(а):
$sql = "SELECT DISTINCT `".WPSC_TABLE_PRODUCT_LIST."`.*, `".WPSC_TABLE_PRODUCT_ORDER."`.`order` FROM `".WPSC_TABLE_PRODUCT_LIST."`
LEFT JOIN `"
.WPSC_TABLE_ITEM_CATEGORY_ASSOC."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_ITEM_CATEGORY_ASSOC."`.`product_id`
LEFT JOIN `"
.WPSC_TABLE_PRODUCT_ORDER."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_PRODUCT_ORDER."`.`product_id`
WHERE `"
.WPSC_TABLE_PRODUCT_LIST."`.`publish`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`active`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`quantity`<>'0' $no_donations_sql $group_sql ORDER BY `".WPSC_TABLE_PRODUCT_LIST."`.`special`, $order_by LIMIT $startnum, $products_per_page
UNION
SELECT DISTINCT `"
.WPSC_TABLE_PRODUCT_LIST."`.*, `".WPSC_TABLE_PRODUCT_ORDER."`.`order` FROM `".WPSC_TABLE_PRODUCT_LIST."`
LEFT JOIN `"
.WPSC_TABLE_ITEM_CATEGORY_ASSOC."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_ITEM_CATEGORY_ASSOC."`.`product_id`
LEFT JOIN `"
.WPSC_TABLE_PRODUCT_ORDER."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_PRODUCT_ORDER."`.`product_id`
WHERE `"
.WPSC_TABLE_PRODUCT_LIST."`.`publish`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`active`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`quantity`='0' $no_donations_sql $group_sql ORDER BY `".WPSC_TABLE_PRODUCT_LIST."`.`special`, $order_by LIMIT $startnum, $products_per_page";

Спустя 2 минуты, 56 секунд (29.04.2011 - 11:34) Joliat написал(а):
Я так пробовал, ошибку не выдает, но при этом пишет В этой группе нет товаров., хотя по отдельности эти 2 условия работают идеально! Что может быть не так?

Спустя 8 минут, 47 секунд (29.04.2011 - 11:43) Oyeme написал(а):
Совсем забыл.
Order by - может быть использован только один раз в нашем случаи(в конце).Попробуйте

$sql = "SELECT DISTINCT `".WPSC_TABLE_PRODUCT_LIST."`.*, `".WPSC_TABLE_PRODUCT_ORDER."`.`order` FROM `".WPSC_TABLE_PRODUCT_LIST."`
LEFT JOIN `"
.WPSC_TABLE_ITEM_CATEGORY_ASSOC."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_ITEM_CATEGORY_ASSOC."`.`product_id`
LEFT JOIN `"
.WPSC_TABLE_PRODUCT_ORDER."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_PRODUCT_ORDER."`.`product_id`
WHERE `"
.WPSC_TABLE_PRODUCT_LIST."`.`publish`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`active`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`quantity`<>'0' $no_donations_sql $group_sql
UNION
SELECT DISTINCT `"
.WPSC_TABLE_PRODUCT_LIST."`.*, `".WPSC_TABLE_PRODUCT_ORDER."`.`order` FROM `".WPSC_TABLE_PRODUCT_LIST."`
LEFT JOIN `"
.WPSC_TABLE_ITEM_CATEGORY_ASSOC."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_ITEM_CATEGORY_ASSOC."`.`product_id`
LEFT JOIN `"
.WPSC_TABLE_PRODUCT_ORDER."` ON `".WPSC_TABLE_PRODUCT_LIST."`.`id` = `".WPSC_TABLE_PRODUCT_ORDER."`.`product_id`
WHERE `"
.WPSC_TABLE_PRODUCT_LIST."`.`publish`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`active`='1' AND `".WPSC_TABLE_PRODUCT_LIST."`.`quantity`='0' $no_donations_sql $group_sql ORDER BY `".WPSC_TABLE_PRODUCT_LIST."`.`special`, $order_by LIMIT $startnum, $products_per_page";





Спустя 8 минут, 34 секунды (29.04.2011 - 11:51) Joliat написал(а):
Тот же результат.
Когда вывожу echo "{$sql}";

то получаю:

SELECT DISTINCT `wp_wpsc_product_list`.*, `wp_wpsc_product_order`.`order` FROM `wp_wpsc_product_list` LEFT JOIN `wp_wpsc_item_category_assoc` ON `wp_wpsc_product_list`.`id` = `wp_wpsc_item_category_assoc`.`product_id` LEFT JOIN `wp_wpsc_product_order` ON `wp_wpsc_product_list`.`id` = `wp_wpsc_product_order`.`product_id` WHERE `wp_wpsc_product_list`.`publish`='1' AND `wp_wpsc_product_list`.`active`='1' AND `wp_wpsc_product_list`.`quantity`<>'0' UNION SELECT DISTINCT `wp_wpsc_product_list`.*, `wp_wpsc_product_order`.`order` FROM `wp_wpsc_product_list` LEFT JOIN `wp_wpsc_item_category_assoc` ON `wp_wpsc_product_list`.`id` = `wp_wpsc_item_category_assoc`.`product_id` LEFT JOIN `wp_wpsc_product_order` ON `wp_wpsc_product_list`.`id` = `wp_wpsc_product_order`.`product_id` WHERE `wp_wpsc_product_list`.`publish`='1' AND `wp_wpsc_product_list`.`active`='1' AND `wp_wpsc_product_list`.`quantity`='0' ORDER BY `wp_wpsc_product_list`.`special`, `wp_wpsc_product_list`.`id` DESC LIMIT 0, 21

Может это как-то поможет?
Уже 3 дня мучаюсь с этим вопросом :(

Спустя 5 минут, 33 секунды (29.04.2011 - 11:57) Joliat написал(а):
На этой странице указанно, что если применять ORDER BY, то нужны круглые скобки. http://www.php.su/mysql/manual/?page=UNION
Как их применить к моему случаю?

Спустя 8 минут, 37 секунд (29.04.2011 - 12:05) Oyeme написал(а):
(SELECT DISTINCT `wp_wpsc_product_list`.*, 
`wp_wpsc_product_order`.`order`
FROM `wp_wpsc_product_list`
LEFT JOIN `wp_wpsc_item_category_assoc`
ON `wp_wpsc_product_list`.`id` =
`wp_wpsc_item_category_assoc`.`product_id`
LEFT JOIN `wp_wpsc_product_order`
ON `wp_wpsc_product_list`.`id` = `wp_wpsc_product_order`.`product_id`
WHERE `wp_wpsc_product_list`.`publish` = '1'
AND `wp_wpsc_product_list`.`active` = '1'
AND `wp_wpsc_product_list`.`quantity`<>'0' )
UNION
(SELECT DISTINCT `wp_wpsc_product_list`.*,
`wp_wpsc_product_order`.`order`
FROM `wp_wpsc_product_list`
LEFT JOIN `wp_wpsc_item_category_assoc`
ON `wp_wpsc_product_list`.`id` =
`wp_wpsc_item_category_assoc`.`product_id`
LEFT JOIN `wp_wpsc_product_order`
ON `wp_wpsc_product_list`.`id` = `wp_wpsc_product_order`.`product_id`
WHERE `wp_wpsc_product_list`.`publish` = '1'
AND `wp_wpsc_product_list`.`active` = '1'
AND `wp_wpsc_product_list`.`quantity` = '0' )


ORDER BY `wp_wpsc_product_list`.`special`,
`wp_wpsc_product_list`.`id` DESC
LIMIT

0, 21

Применил скобки.Хотя я не думаю что в этом проблема.

В Вашем случаи только путём исключения Вы сможите найти "почему не работает"
Попробуйте более простые заппросы.Потом путём подключение разных условий Вы сможите узнать что мешает выводу.

Спустя 2 часа, 1 минута, 48 секунд (29.04.2011 - 14:07) Joliat написал(а):
Да, Вы били правы, ничего не помогло.

Далее есть только одна строка, где упоминается $sql вот она:
	$this->products = $wpdb->get_results($sql,ARRAY_A);


Может сюда как-то получится приделать $sql_1, который будет соответствовать второму условию?

Спустя 49 минут, 1 секунда (29.04.2011 - 14:56) Joliat написал(а):
Решение найдено!)))) УРА!
Oyeme, Спасибо за правильное направление моих блуждающих мыслей!))

Вот ответ:
	$sql='('.$sql.') UNION ('.$sql_1.')';
$this->products = $wpdb->get_results($sql,ARRAY_A);

почему-то оно действует на основной странице, а на других вывод как и прежде, но это уже дело времени.


_____________
О-о-о-о-о-очень начинающий...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.