Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день!
Подскажите, пожалуйста, с достаточно простой задачкой...
Есть таблица следующего вида.
field_lable field_value record_id
----------------------------------------------------
дата обращения 2015-01-01 3
фамилия Иванов 3
имя Иван 3
отчество Иванович 3
дата обращения 2015-02-01 4
фамилия Петров 4
имя Пётр 4
отчество Петрович 4
дата обращения 5
фамилия Сергеев 5
имя Сергей 5
отчество Сергеевич 5
Нужно из неё получить следующий вид:
фамилия имя отчество id дата обращения
----------------------------------------------------------------------
Иванов Иван Иванович 3 2015-01-01
Петров Пётр Петрович 4 2015-02-01
Выводиться должны только те записи, где заполнено поле "Дата обращения". Сортировка в новой таблице осуществляется по этому же полю. В таблице число таких record_id исчисляется тысячами.
Заранее спасибо за ответ!
Неактивен
Неактивен
Сделал транспонирование следующим образом:
Неактивен
Неактивен
Правильней будет так
Неактивен
Работает. Спасибо.
Появился один нюанс.
При выводе в phpmyadmin всех записей (со значениями null) запрос выполняется очень быстро (9к записей за 0,003 +/- сек)
Теперь при выводе результатов итогового, последнего запроса (без null) его обработка занимает более 1,5 сек. И выводится сразу огромной портянкой (соответственно и отрисовывается очень долго), хотя ранее по умолчанию всегда использовался вывод по 30 записей на странице.
К сожалению, вариант с удалением сначала пустых дат не подойдёт, т.к. где-то может отсутствовать отчество (например) в поле field_value и вся запись даже с наличием даты окажется в пролёте. Критичным является именно наличие даты.
Ещё один вопрос.
Полученные данные нужно залить в новую пустую таблицу d_list_value через UPDATE. Подскажите, как можно использовать данный запрос в этом деле.
Поля новой таблицы: id(auto increment), record_id, first_name, second_name, third_name, date_tr
Имеет ли смысл заапдейдить не запариваясь сначала всеми записями (в том числе и с пустыми) и потом через delete удалить лишнее? Или же данный вариант будет хуже смотреться в плане производительности и вообще не комильфо?
Неактивен
Если запрос выполняется разово, то с производительностью можно не заморачиваться.
Неактивен
Vasya, есть необходимость в периодическом обновлении новой таблицы d_list_value. Подойдёт ли здесь оператор insert? Поэтому и спросил именно про оператор update и быстродействие.
Неактивен
"данные нужно залить в новую пустую таблицу" это однозначно insert.
Что вы подразумеваете под "периодическим обновлением новой таблицы"?
Вариант с последующим delete быстрее не будет.
Неактивен
Обновлённые данные должны появляться раз в сутки.
При первичном вводе данных однозначно insert. Но в дальнейшем таблица будет уже заполнена. Встаёт вопрос, как её обновлять в последствии. Через update? Или удалять все данные и заново заполнять через insert?
Собственно, стоит ли думать об изящном update, если можно сделать в лоб через delete-insert.
Отредактированно Sapta (31.03.2015 16:47:17)
Неактивен
Зависит от того, что нужно.
Если добавить новые строки в заполненную таблицу, то insert
Если обновить уже существующие строки, то update
Мне сложно дать ответ, так как я не знаю задачу, может вам нужно выбирать из транспонированной таблицы записи с датой обращения за прошедший день и их добавлять, или ....
Неактивен
Каждый раз нужна полная выборка из исходной таблицы. Количество записей в неё не статично: может как увеличиться, так и уменьшиться. Поэтому нужно будет обновлять все строки в любом случае.
Неактивен
Тогда truncate/delete, затем insert
Неактивен
Хорошо.
Спасибо за помощь!
Неактивен