powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как объеденить запросы INSERT, UPDATE и узнать будущее значение авто_инкримент?
6 сообщений из 6, страница 1 из 1
Как объеденить запросы INSERT, UPDATE и узнать будущее значение авто_инкримент?
    #32685025
serf2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Помогите пожалуйста объеденить 4 запроса в 1 если это возможно. Использую MySQL 4.0

$dbh->do("INSERT into topics (id_f, name) values($id, $topicmess)");
($id_t) = $dbh->selectrow_array("select id from topics WHERE id_f = $id AND name = $topicmess"); # id - авто_инкримент, использую этот запрос т.к. не знаю какое значение приняло после вставки предыдущем запросом
$dbh->do("INSERT into replies (id_t, text) values($id_t, $mess)");
$dbh->do("UPDATE forums set topics = topics + 2 where id = $id");

С уважением Сергей
...
Рейтинг: 0 / 0
Как объеденить запросы INSERT, UPDATE и узнать будущее значение авто_инкримент?
    #32685059
serf2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или не использовать запрос UPDATE, но тогда использовать примерно вот такой:
$sth=$dbh->prepare("select forums.id, forums.name, COUNT(topics.id_f), forums.replies, DATE_FORMAT(forums.last_data_db, '%d-%m-%Y %H:%i:%s') from forums, topics WHERE forums.id=topics.id_f AND forums.id GROUP BY topics.id_f");

Проблема в том что нужно вернуть все записи, а возвращаются соответственно только соответствующии условию forums.id=topics.id_f, которое справедливо только для COUNT(topics.id_f)

Если не трудно помогите разобраться с этим.
...
Рейтинг: 0 / 0
Как объеденить запросы INSERT, UPDATE и узнать будущее значение авто_инкримент?
    #32686075
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще то первый вариант более правильный но не совсем :))
существует специальная функция

Код: plaintext
1.
2.
3.
4.
5.
6.
$dbh->do("INSERT into topics (id_f, name) values($id, $topicmess)");
// ----------------------------------------------------------------- 
// Вернет последнее значение последнего автоинкреметного поля
$id_t =$dbh->mysql_insert_id();

$dbh->do("INSERT into replies (id_t, text) values($id_t, $mess)");
$dbh->do("UPDATE forums set topics = topics + 2 where id = $id");
...
Рейтинг: 0 / 0
Как объеденить запросы INSERT, UPDATE и узнать будущее значение авто_инкримент?
    #32687482
serf2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olkвообще то первый вариант более правильный но не совсем :))
существует специальная функция

Код: plaintext
1.
2.
3.
4.
5.
6.
$dbh->do("INSERT into topics (id_f, name) values($id, $topicmess)");
// ----------------------------------------------------------------- 
// Вернет последнее значение последнего автоинкреметного поля
$id_t =$dbh->mysql_insert_id();

$dbh->do("INSERT into replies (id_t, text) values($id_t, $mess)");
$dbh->do("UPDATE forums set topics = topics + 2 where id = $id");


Но эта функция вернет последнее значение, но возможно не то которое нужно, ведь в одно и тоже время могут практически одновременно вставляться записи, и оно может вернуть значение последнее, а уже возможно нужно предпоследнее.
Как можно эти запросы объеденить в один?
Или как можно довести до ума этот запрос:
$sth=$dbh->prepare("select forums.id, forums.name, COUNT(topics.id_f), forums.replies, DATE_FORMAT(forums.last_data_db, '%d-%m-%Y %H:%i:%s') from forums, topics WHERE forums.id=topics.id_f AND forums.id GROUP BY topics.id_f");

т.е. для COUNT(topics.id_f) возврашаются данные соответствующие WHERE forums.id=topics.id_f, но нужно еще вернуть так же данные из таблицы forums для полей id, name и т.д. которые этому условию не соответствую.
Я так предпологаю, что нужно использовать LEFT(или RIGHT) OUTER JOIN

Заранее благодарен
Сергей
...
Рейтинг: 0 / 0
Как объеденить запросы INSERT, UPDATE и узнать будущее значение авто_инкримент?
    #32687675
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_insert_id() вернет последнее значение автоинкр. поля для записи добавленной в текущей сессии. то есть тоько вами. то что добавляют другие - на вас не скажется.
...
Рейтинг: 0 / 0
Как объеденить запросы INSERT, UPDATE и узнать будущее значение авто_инкримент?
    #32688490
serf2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
serf2004[quot olk]
Как можно довести до ума этот запрос:
$sth=$dbh->prepare("select forums.id, forums.name, COUNT(topics.id_f), forums.replies, DATE_FORMAT(forums.last_data_db, '%d-%m-%Y %H:%i:%s') from forums, topics WHERE forums.id=topics.id_f AND forums.id GROUP BY topics.id_f");

т.е. для COUNT(topics.id_f) возврашаются данные соответствующие WHERE forums.id=topics.id_f, но нужно еще вернуть так же данные из таблицы forums для полей id, name и т.д. которые этому условию не соответствую.
Я так предпологаю, что нужно использовать LEFT(или RIGHT) OUTER JOIN

Заранее благодарен
Сергей

Спасибо за пояснение про возращение последнего значения авто_инкримента.
Как довести до ума все таки второй запрос. Буду очень благодарен если подскажите.

С ыважением Сергей
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как объеденить запросы INSERT, UPDATE и узнать будущее значение авто_инкримент?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]