Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как присоединить одну таблицу к другой?
 
 автор: Владимир55   (15.02.2009 в 00:05)   письмо автору
 
 

Чтобы таблица не была слишком большой, я хочу в конце дня всю информацию, набранную за сутки и находящуюся в суточной таблице, приплюсовать к общей таблице для длительного хранения. По существу, просто дописать в суммарную таблицу то, что зарегистрировано за сутки.

Как осуществить такое слияние таблиц?

Просто перебрать строки суточной таблицы и почередно проинсертить их к общей таблице? Или есть более простой способ?

=======================
Структура суточной таблицы и таблицы с суммарными данными одинаковы.

  Ответить  
 
 автор: Trianon   (15.02.2009 в 00:10)   письмо автору
 
   для: Владимир55   (15.02.2009 в 00:05)
 

оператор INSERT INTO ... SELECT ...

  Ответить  
 
 автор: Владимир55   (15.02.2009 в 00:15)   письмо автору
 
   для: 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 с такой же структурой?

  Ответить  
 
 автор: Trianon   (15.02.2009 в 00:18)   письмо автору
 
   для: Владимир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)   письмо автору
 
   для: Trianon   (15.02.2009 в 00:18)
 

А я пытался найти ответ здесь http://www.csu.ac.ru/~srg/mysql_doc/manual.ru_toc.html#Reference

  Ответить  
 
 автор: Trianon   (15.02.2009 в 00:28)   письмо автору
 
   для: Владимир55   (15.02.2009 в 00:25)
 

здесь тоже есть :)
http://www.csu.ac.ru/~srg/mysql_doc/manual.ru_Reference.html#INSERT_SELECT
Не самый удобный источник для онлайна - весь талмуд одним файлом

  Ответить  
 
 автор: Владимир55   (15.02.2009 в 00:38)   письмо автору
 
   для: 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?
В чем его смысл?

  Ответить  
 
 автор: Trianon   (15.02.2009 в 00:45)   письмо автору
 
   для: Владимир55   (15.02.2009 в 00:38)
 

ну видимо автору примера нужно было не все строки вставлять, а только некоторые.
Которые больше сотни.

Первого вопроса не понял.
Выполняя запрос в phpMyAdmin никаких присваиваний $query делать не надо.
Выполняя его из php, все равно не хватает самого вызова mysql_query() и проверки успеха выполнения.

Кстати. В примере этом показано, как из таблицы в таблицу переносится один столбик.
Так вот, один - это тоже всего навсего особенность примера, а не ограничение конструкции оператора.

  Ответить  
 
 автор: Владимир55   (15.02.2009 в 00:50)   письмо автору
 
   для: 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);    


Это верно?

  Ответить  
 
 автор: Trianon   (15.02.2009 в 00:54)   письмо автору
 
   для: Владимир55   (15.02.2009 в 00:50)
 

$res = mysql_query($query);
if(!$res) ...
ну и мануал для полноты картины рекомендует воспользоваться редкой довольно таки функцией mysql_info() , но это уже для эстетов...

  Ответить  
 
 автор: Владимир55   (15.02.2009 в 01:00)   письмо автору
 
   для: Trianon   (15.02.2009 в 00:54)
 

Я полагал, что
mysql_query($query);
выполняет запрос, при исполнении которого информация из одной таблицы записывается в другую.

Разве это не так?

А if(!$res) - это уже проверка?

  Ответить  
 
 автор: Trianon   (15.02.2009 в 01:02)   письмо автору
 
   для: Владимир55   (15.02.2009 в 01:00)
 

mysql_query($query) выполняет запрос, текст которого содержится в переменной $query.

да, проверка.

Мне еще долго бритвой Оккама махать? :)

  Ответить  
 
 автор: Trianon   (15.02.2009 в 00:56)   письмо автору
 
   для: Владимир55   (15.02.2009 в 00:50)
 

>А если нужно вставлять все строки, тогда как?

а если Вам нужно выбрать SELECTом из таблицы все строки, тогда как?

SELECT-часть оператора пишется по обычным правилам составления SELECT -запросов.
Кстати, INSERT-часть - тоже. Просто вместо VALUES со списком значений пишется оператор SELECT

  Ответить  
 
 автор: Владимир55   (15.02.2009 в 01:11)   письмо автору
 
   для: Trianon   (15.02.2009 в 00:56)
 

"Мне еще долго бритвой Оккама махать? :)"
Я стараюсь...

Тогда для добавления ВСЕХ строк таблицы tab_sut в таблицу tab_summ должен подойти такой код:
        $query = "INSERT INTO tab_summ  SELECT tab_sut *  
        FROM tab_sut "; 
        mysql_query($query);  


Годится?

  Ответить  
 
 автор: Trianon   (15.02.2009 в 01:20)   письмо автору
 
   для: Владимир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 .

  Ответить  
 
 автор: Владимир55   (15.02.2009 в 01:39)   письмо автору
 
   для: Trianon   (15.02.2009 в 01:20)
 

"Хотя я написал бы честно"
Мне очень импонирует Ваша корректность!

У меня пока мало опыта и вопросы звучат коряво - это я понимаю. Так что спасибо и за совет, и за терпение!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования