|
|
|
| Чтобы таблица не была слишком большой, я хочу в конце дня всю информацию, набранную за сутки и находящуюся в суточной таблице, приплюсовать к общей таблице для длительного хранения. По существу, просто дописать в суммарную таблицу то, что зарегистрировано за сутки.
Как осуществить такое слияние таблиц?
Просто перебрать строки суточной таблицы и почередно проинсертить их к общей таблице? Или есть более простой способ?
=======================
Структура суточной таблицы и таблицы с суммарными данными одинаковы. | |
|
|
|
|
|
|
|
для: Владимир55
(15.02.2009 в 00:05)
| | оператор INSERT INTO ... SELECT ... | |
|
|
|
|
|
|
|
для: Trianon
(15.02.2009 в 00:10)
| | Это я не совсем понял.
Вот пример таблицы tab_sut с суточными данными:
id identif time_s str_vn s_knigy
1 1234636018259043 1234636030 52.htm yes
2 1234636103483777 1234636125 57.htm yes
3 1234636196657594 1234636226 51.htm yes
|
Как приплюсовать ее к таблице tab_summ с такой же структурой? | |
|
|
|
|
|
|
|
для: Владимир55
(15.02.2009 в 00:15)
| | Это потому, что Вы не заглянули в мануал . В главу с оператором INSERT .
http://dev.mysql.com/doc/refman/5.1/en/insert-select.html
http://www.mysql.ru/docs/man/INSERT_SELECT.html | |
|
|
|
|
|
|
|
|
для: Владимир55
(15.02.2009 в 00:25)
| | здесь тоже есть :)
http://www.csu.ac.ru/~srg/mysql_doc/manual.ru_Reference.html#INSERT_SELECT
Не самый удобный источник для онлайна - весь талмуд одним файлом | |
|
|
|
|
|
|
|
для: Trianon
(15.02.2009 в 00:28)
| | Было бы превеличением сказать, что мне удалось полностью понять эту штуку. Может быть нужно делать так:
$query = "INSERT INTO tab_summ (fldID) SELECT tab_sut.fldOrder_ID
FROM tab_sut
WHERE tab_sut.fldOrder_ID > 100;
";
|
Это верно?
========================
А причем здесь число 100?
В чем его смысл? | |
|
|
|
|
|
|
|
для: Владимир55
(15.02.2009 в 00:38)
| | ну видимо автору примера нужно было не все строки вставлять, а только некоторые.
Которые больше сотни.
Первого вопроса не понял.
Выполняя запрос в phpMyAdmin никаких присваиваний $query делать не надо.
Выполняя его из php, все равно не хватает самого вызова mysql_query() и проверки успеха выполнения.
Кстати. В примере этом показано, как из таблицы в таблицу переносится один столбик.
Так вот, один - это тоже всего навсего особенность примера, а не ограничение конструкции оператора. | |
|
|
|
|
|
|
|
для: Trianon
(15.02.2009 в 00:45)
| | А если нужно вставлять все строки, тогда как?
Так:
$query = "INSERT INTO tab_summ (fldID) SELECT tab_sut.fldOrder_ID
FROM tab_sut
WHERE tab_sut.fldOrder_ID > 1;
";
mysql_query($query);
|
Это верно? | |
|
|
|
|
|
|
|
для: Владимир55
(15.02.2009 в 00:50)
| | $res = mysql_query($query);
if(!$res) ...
ну и мануал для полноты картины рекомендует воспользоваться редкой довольно таки функцией mysql_info() , но это уже для эстетов... | |
|
|
|
|
|
|
|
для: Trianon
(15.02.2009 в 00:54)
| | Я полагал, что выполняет запрос, при исполнении которого информация из одной таблицы записывается в другую.
Разве это не так?
А if(!$res) - это уже проверка? | |
|
|
|
|
|
|
|
для: Владимир55
(15.02.2009 в 01:00)
| | mysql_query($query) выполняет запрос, текст которого содержится в переменной $query.
да, проверка.
Мне еще долго бритвой Оккама махать? :) | |
|
|
|
|
|
|
|
для: Владимир55
(15.02.2009 в 00:50)
| | >А если нужно вставлять все строки, тогда как?
а если Вам нужно выбрать SELECTом из таблицы все строки, тогда как?
SELECT-часть оператора пишется по обычным правилам составления SELECT -запросов.
Кстати, INSERT-часть - тоже. Просто вместо VALUES со списком значений пишется оператор SELECT | |
|
|
|
|
|
|
|
для: Trianon
(15.02.2009 в 00:56)
| | "Мне еще долго бритвой Оккама махать? :)"
Я стараюсь...
Тогда для добавления ВСЕХ строк таблицы tab_sut в таблицу tab_summ должен подойти такой код:
$query = "INSERT INTO tab_summ SELECT tab_sut *
FROM tab_sut ";
mysql_query($query);
|
Годится? | |
|
|
|
|
|
|
|
для: Владимир55
(15.02.2009 в 01:11)
| | если id тоже должен копироваться из таблицы - да. Хотя я написал бы честно:
$query = "
INSERT INTO tab_summ(id, identif, time_s, str_vn, s_knigy)
SELECT id, identif, time_s, str_vn, s_knigy
FROM tab_sut
ORDER BY id
";
|
Если id'ы в разных таблицах живут жизнью независимой, их нужно из списков убрать.
>"Мне еще долго бритвой Оккама махать? :)"
>Я стараюсь..
просто Вы в этом диалоге пытаетесь смешать разные аспекты в кучу,
а я пытаюсь показать, что так только сложнее.
Нельзя одновременно думать и о том, как запрос построить, и как его в php уложить.
То есть можно, конечно, если голову не жаль...
Лучше зайти в phpMyAdmin (или еще какой любимый клиент) создать пару таблиц, что не жалко угробить, и покидать их туда сюда. А потом уже приниматься за обрамление в php . | |
|
|
|
|
|
|
|
для: Trianon
(15.02.2009 в 01:20)
| | "Хотя я написал бы честно"
Мне очень импонирует Ваша корректность!
У меня пока мало опыта и вопросы звучат коряво - это я понимаю. Так что спасибо и за совет, и за терпение! | |
|
|
|