Альтернатива оператору Union в MysqL 3.23
An alternative, rather simpler (especially with very complex select statements) way to 'use union' in 3.x might be the following:
Build a nice union query. (save it somewhere, so you can use that if you upgrade)
If you would say that query was '(*cool_select_statement_1*) UNION (*cool_select_statement_2*) *order_and_group_by_stuff*'.
You could make an replacement set of query's like this:
CREATE TEMPORARY TABLE temp_union TYPE=HEAP *cool_select_statement_1*;
INSERT INTO temp_union *cool_select_statement_2*;
SELECT * FROM temp_union *order_and_group_by_stuff*;
DROP TABLE temp_union;
Note that I've use a HEAP and TEMPORARY table because that combination is rather fast and, well, temporary.
You can't execute these query's on one line (well I coudn't so it would look like this in PHP:
mysql_query('CREATE..', $connection);
mysql_query('INSERT..', $connection);
$query = mysql_query('SELECT..', $connection);
mysql_query('DROP..', $connection);
from:
http://dev.mysql.com/doc/mysql/en/UNION.html
мне надо сделать запрос для поиска в три таблицы и обрезать этот запрос LIMITом (как раз чтобы время поиска уменьшилось..но если в одной таблице это делается элементарно, то в 3-х таблицах я не знаю как это сделать без юниона....а если создавать временные таблицы, то это все равно время занимает причем не только на то чтобы сделать запрос а еще на то чтобы сделать туда вставку...я конешно могу сделать три запроса и в каждом из них сделать LIMIT...но это не профессионально для веб-программиста...вот поэтому и ищу решения...если у тя есть какие нить идеи, то поделись..буду благодарен....
Переходи на 4-тый mysql.
Тем более он current и recommended .
у тебя использование LIMIT уменьшает время поиска?
можно пример?
В некоторых случаях, когда используется LIMIT # и не используется HAVING, MySQL будет выполнять запрос несколько иначе:ЗЫ Есть ещё куча примеров, когда с LIMITом будет быстрее работать.
* После того как MySQL пошлет первые # строк клиенту, он прервет выполнение запроса (если не используется SQL_CALC_FOUND_ROWS).
Допустим у меня есть задача...найти все строки из трех разных таблиц где содержится слово 'форум'...причем сразу поставить лимит 10 строк...Если использовать юнион то тут все понятно..пишешь выбери то и то...а потом общий запрос обрежь 10 строками....а у меня 3 таблицы....все что я могу в данный момент сделать...это сделать 3 запроса и каждый из них обрезать например 3 строками...но тада в результирующем получится 9 строк....то есть все кратно трем...а мне нужен общий случай...причем все таблицы очень большие....и скрипт очень много времени тратит на то чтобы все эти строки из трех таблиц выбрать , потом и х поместить в массив (или временную таблицу а уж потом их неё выбрать уже 10 первых например строк....вот такая у меня задача... смысл её в том чтобы максимально сократить время исполнения скрипта, обрезав все в самом запросе (БЕЗ ЮНИЮНА...
4-ую версию не использует например мастерхост....и еще куча хостинговых компаний...
а потом из объединения 10
вот мне как раз и надо чтобы в общем зпросе он отобрал 10 строк послал мне их и прервал запрос....только запрос то не один а 3!
спасибо за идею....но это не профессионально...а что если мне надо будет вывести с 35-й строки по 68-ю? как раз мне это и надо сделать поиск по сайту из трех таблиц, и поставить чтобы переключались страницы....причем количество строк в одной странице может быть произволльно установлено пользователем...
Хостинговых компаний во-первых много, во-вторых masterhost не входит в число, которых я рекомендовал бы для хостинга.
у них пиздатый фпт!по моему мнению....
А как ftp соотносится с subj ?
Оставить комментарий
SergeyVorobiev
КАк можно заменить оператор union конекретно в mysql? Он рпализован только в 4-х версиях а мне нужно объединить два запроса в один в 3-х версиях...причем таблицы никак между собой на связаны...то есть всякие join тут не подходят...