IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Совмещенные запросы в mySQL (http://www.imho.ws/showthread.php?t=65453)

Drualex 01.08.2004 19:52

Совмещенные запросы в mySQL
 
Товарищи, скажите мне, неужели в мускуле нельзя делать совмещенные запросы(запросы из разных таблиц в 1-й БД) на uploade, delete & insert. Я заметил что делать их можно только для select, да и то я был очень огорчен, что в запросе на вывод определенного количества строк(limit *, *) не проходит при запросе из 2 -х таблиц:(((
Вот моя ситуация: написал модуль новостей, использует БД для хранения. В БД у меня 2 таблицы, в 1-й таблице хранится индекс,тема, дата, и краткое описание. Во 2-й индекс и полное описание. Сделал так, что если вы писали подробную новость, то появляется ссылка на подробнее, если нет то нет. Но фишка в том, что мне приходится делать 2 запроса, из которых 1-й выводят инфу краткую, а 2-й проверяет есть ли подробное описание. И это не единственный момент где мне приходится это делать.
Вообще в мускуле есть такая возможность?
С уважением.

Hubbitus 01.08.2004 20:35

Запросы отличные от select для нескольких таблиц делать вроде бы нельзя (на 100% не уверен)
Цитата:

Drualex:
Я заметил что делать их можно только для select, да и то я был очень огорчен, что в запросе на вывод определенного количества строк(limit *, *) не проходит при запросе из 2 -х таблиц((
С этим никаких проблем нету, и limit работает нормально.
Цитата:

Drualex:
Вот моя ситуация: написал модуль новостей, использует БД для хранения. В БД у меня 2 таблицы, в 1-й таблице хранится индекс,тема, дата, и краткое описание. Во 2-й индекс и полное описание. Сделал так, что если вы писали подробную новость, то появляется ссылка на подробнее, если нет то нет. Но фишка в том, что мне приходится делать 2 запроса, из которых 1-й выводят инфу краткую, а 2-й проверяет есть ли подробное описание.
Зачем два запроса делать-то? Вы же сами написали что select для нескольких таблиц работает???
Вот когда обновляете таблицу - возможно придется делать два запроса, но это не слишком принципиальные издержки, ведь 90% запросов это select...

is_absent 01.08.2004 22:10

Цитата:

Hubbitus
Запросы отличные от select для нескольких таблиц делать вроде бы нельзя (на 100% не уверен)
такое я видел только в Oracle. там можно делать тригер на вставку/удаление/одновление представления (view)
Цитата:

Drualex:
Но фишка в том, что мне приходится делать 2 запроса, из которых 1-й выводят инфу краткую, а 2-й проверяет есть ли подробное описание. И это не единственный момент где мне приходится это делать.
Вообще в мускуле есть такая возможность?
select ... from short_news sn left join full_news fn on sn.id = fn.id
если в табличке full_news не будет строки, в котором поле id совпадает с аналогичным в short_news, на месте всех значений этой строки будет стоять null....
но мне кажется, что проще перенести это поле в таблицу с новостями и разрешать ему (полю) принимать значение null.

alexhardware 02.08.2004 04:25

Приведи пример запроса - интересно. У меня вроде работает с несколькими таблицами без проблем и update и delete и insert

Drualex 02.08.2004 10:26

2is_absent Я тоже использовал конструкцию left join пока мне не понадобилось выводить ограниченное количество сообщенией. При использовании "limit" у меня он просто отказался работать :(
1-й запрос:
SELECT * FROM description
ORDER BY id DESC
LIMIT $start, $num;
2-й
SELECT * FROM detailed
ORDER BY id DESC
LIMIT $start, $num;
Вот такие дела.
С уважением.

is_absent 02.08.2004 10:50

Drualex
а где там left join? и зачем нужен лимит во втором случае?
Код:

create table t1 (
  id int unsigned not null auto_increment,
  primary key (id)
);

insert into t1 values(1);
insert into t1 values(2);
insert into t1 values(3);
insert into t1 values(4);
insert into t1 values(5);
insert into t1 values(6);
insert into t1 values(7);
insert into t1 values(8);
insert into t1 values(9);
insert into t1 values(10);
insert into t1 values(12);
insert into t1 values(13);
insert into t1 values(14);
insert into t1 values(123);

create table t2 (
  id int unsigned not null auto_increment,
  primary key (id)
);
insert into t2 values(1);
insert into t2 values(2);
insert into t2 values(4);
insert into t2 values(6);
insert into t2 values(8);
insert into t2 values(100);

select * from t1 left join t2 on t2.id = t1.id limit 0, 4

вот. у меня стоит mysql 3.23, 4.0, 5.. на всех запрос прошел.

Sheryld 03.08.2004 18:35

вот еще есть оганичения внешнего ключа в таблицах innoDB(on delete). но тем не менее возможностей по работе со связными данными в принципе и самих возможностей связи этих самых данных много меньше, чем скажем в Sql Server 2K...

Hubbitus 03.08.2004 22:52

Кстати в MySQL 4.x появилась возможность удаления сразу из нескольких таблиц.

is_absent 03.08.2004 23:08

Hubbitus
позволю себе не согласится... проверял на MySQL 3.23 delete from t1, t2, t3... работает :)

is_absent 04.08.2004 00:19

зря я не согласился :)
Приношу свои извинения. Hubbitus прав относительно возможности удаления из нескольких таблиц одновременно

Drualex 04.08.2004 23:03

Нда, :) это видно я просто запрос некорректный ввел. Не могли бы мне пример продемонстрировать, то бы я понял ошибку?

is_absent 05.08.2004 07:33

Drualex
Так ты свой покажи... :) Те два, что ты привел (пост #5) работать должны прекрасно


Часовой пояс GMT +4, время: 22:33.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.