Как и чем можно заменить UNION ?

bovkun

Новичок
Как и чем можно заменить UNION ?

Народ, подскажите, плиз.

Как и чем можно заменить UNION ?
У хостера стоит старая версия MySQL, а UNION работает с 4.0.0.
Хостинг куплен, сайт запущен, а работает не все. Совсем радикально все менять как-то не очень хочется...


PHP:
(SELECT * FROM table_1 WHERE 1 AND `field_1` = '$var_1')
UNION
(SELECT * FROM table_2 WHERE 1 AND `field_1` = '$var_1')
 

Demiurg

Guest
делай 2 запроса или через временную таблицу.
 

Tigr

Новичок
Если MySQL версии 3.23.25 или выше то может заинтересовать - http://dev.mysql.com/doc/mysql/ru/MERGE.html
 

bovkun

Новичок
Автор оригинала: si
по просить хостера поменять версию
> Пожалуйста, обновите MySQL.
> Сейчас у Вас стоит 3.23.38 и поэтому не работают некоторые операторы
> (например UNION, который реализован в MySQL 4.0.0).
>
> http://dev.mysql.com/downloads/mysql/4.0.html :)
>
> Очень нужно и очень срочно...
>
> С уважением, ...

К сожалению это не возможно.
:confused: :eek:

-~{}~ 19.05.04 11:29:

... "великое дело", *ля! @$%^&*(

-~{}~ 19.05.04 11:30:

Demiurg
Tigr
si

Спасибо
 

Demiurg

Guest
>Ну а если через 2 запроса, то можно ли каким-то образом все вместе отсортировать?
нет, только на PHP, но это изврат.
 

chira

Новичок
ну если совсем "вилы", можно извратиться создав 3 таблицу dual, добавить 2 записи
Код:
mysql> create table dual (dummy char(1));
Query OK, 0 rows affected (0.02 sec)

mysql> insert into dual values ('1');
Query OK, 1 row affected (0.00 sec)

mysql> insert into dual values ('2');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+------+-------+-------+
| id   | name  | phone |
+------+-------+-------+
|    1 | Vasja | 123   |
|    2 | Misa  | 234   |
|    3 | Kolja | 456   |
+------+-------+-------+
3 rows in set (0.00 sec)

mysql> select * from t2;
+------+-------+-------+
| id   | smoke | drink |
+------+-------+-------+
|    1 | yes   | no    |
|    3 | yes   | no    |
+------+-------+-------+
2 rows in set (0.00 sec)

mysql> select distinct IF(d.dummy='1',t1.id,t2.id) id, IF(d.dummy='1',t1.name,t2.smoke) name, IF(d.dummy='1',t1.phone,t
2.drink) phone from dual d LEFT JOIN t1 ON d.dummy='1' LEFT JOIN t2 ON d.dummy='2' where d.dummy in(1,2);
+------+-------+-------+
| id   | name  | phone |
+------+-------+-------+
|    1 | Vasja | 123   |
|    2 | Misa  | 234   |
|    3 | Kolja | 456   |
|    1 | yes   | no    |
|    3 | yes   | no    |
+------+-------+-------+
5 rows in set (0.02 sec)

mysql>
 

neko

tеam neko
просто

create temporary table if not exists table_name seleft ...
выбираешь все что надо, сколько надо раз

потом

select ... from table_name order by ...

-~{}~ 19.05.04 13:25:

собственно до появление union (что случилось в 4.0.0) это только так и делалось, нет?
 

Falc

Новичок
neko
>>собственно до появление union (что случилось в 4.0.0) это только так и делалось, нет?

Только в этом топике привели 3 способа.
Наример, если выбирается десяток записей, то создавать временую таблицу нет смысла, эфективнее все отсортировать все в пыхе.
 

bovkun

Новичок
Автор оригинала: Falc
neko
>>собственно до появление union (что случилось в 4.0.0) это только так и делалось, нет?

Только в этом топике привели 3 способа.
Наример, если выбирается десяток записей, то создавать временую таблицу нет смысла, эфективнее все отсортировать все в пыхе.
Согласен. Все варианты интересные! Щаз смотрю, что лучше подойдет...

-~{}~ 19.05.04 13:02:

А на коротком примере на счет
CREATE TEMPORARY TABLE IF NOT EXISTS
объясните, плиз...
 

bovkun

Новичок
- Создаю таблицу (с описанием полей), а дальше как?
- Записываем в этутаблицу резултат select (? как это сделать не пойму)
- Потом делаем выборку из временной таблицы
- По окончинии TEMPORARY TABLE удаляетс сама

Так? Как практически это описать?
 

Profic

just Profic (PHP5 BetaTeam)
bovkun
Что непонятно-то?
[sql]CREATE TEMPORARY TABLE table_name SELECT * FROM table_1 WHERE field_1 = '$var_1'[/sql]
и
[sql]INSERT INTO table_name SELECT * FROM table_2 WHERE field_1 = '$var_1'[/sql]
а потом
[sql]SELECT * FROM table_name ORDER BY field_1[/sql]
 

neko

tеam neko
можно даже и не insert делать

а все время create temporary if not exists etc

1 раз создаст
остальные поинсертит

затрудняюсь сказать насколько это вообще/теоретически корректно такие запросы писать

но работать будет, и иногда это бывает удобно нежели создавать а потом добавлять
 

Profic

just Profic (PHP5 BetaTeam)
neko
Можно, я не спорю просто так более наглядно видно что происзодит :)

bovkun
- Создаю таблицу (с описанием полей), а дальше как?
Временную таблицу, поля описывать не нужно - они сами перекочуют из таблицы
- Записываем в эту таблицу резултат select (? как это сделать не пойму)
угу, смотри пример
- Потом делаем выборку из временной таблицы
угу
- По окончинии TEMPORARY TABLE удаляетс сама
угу
 

Profic

just Profic (PHP5 BetaTeam)
neko
>1 раз создаст остальные поинсертит
на самом деле довольно интересное поведение :)
Ведь по идее при наличии этой таблицы весь запрос должен игнорироваться :)
 
Сверху