Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите реализовать экспорт как в phpmyadmin
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток. Есть БД с более чем 200к записей. Сначала я из нее вытягиваю основные данные вот таким вот запросом SELECT i.individual_id, i.individual_barcode, concat(i.individual_firstname, ' ', i.individual_secondname, ' ', i.individual_surname), i.profession, i.political_allegiance, i.help_request, i.individual_birthday, i.individual_dateadded, rd.regionDistrict_name, loc.locality_name, d.district_name, com.name, mchs.medicine_chest_status_name FROM `individual` as i LEFT JOIN comments as com ON (com.comment_id = i.comment_id) INNER JOIN address as a ON (i.individual_Address_id = a.address_id) INNER JOIN regionDistrict as rd ON (a.address_RegionDistrict_id = rd.regionDistrict_id) INNER JOIN locality as loc ON (a.address_Locality_id = loc.locality_id) INNER JOIN district as d ON (a.address_District_id = d.district_id) LEFT JOIN medicine_chest as mch ON (mch.inidividual_id = i.individual_id) INNER JOIN medicine_chest_statuses as mchs ON (mch.medicine_chest_status_id = mchs.medicine_chest_status_id) Дальше в цикле перебираю полученные данные и к ним подтягиваю телефоны, статусы пользователей и записываю все это в csv файл foreach($result as $individualKey => $individual){ if($isPhone) { $telephones = ''; $sql = "SELECT concat(t.telephone_code, t.telephone_number) as phone FROM `individual_telephone` as it INNER JOIN telephone as t ON (it.telephone_id = t.telephone_id) WHERE individual_id = " . $individual['individual_id']." AND t. telephone_code <> 1 LIMIT 0,1"; $tels = $this->db->createCommand($sql)->queryAll(); foreach ($tels as $tel) { $telephones .= ' '.$tel['phone'].','; } $individual['phone'] = str_replace([' ', '-'], '', preg_replace($pattern, '', $telephones)); } if($isStatus) { $statuses = ''; $sql = "SELECT s.status_name as status FROM status_individual as si INNER JOIN status as s ON (si.status_id = s.status_id) WHERE individual_id = " . $individual['individual_id']; $result2 = $this->db->createCommand($sql)->queryAll(); foreach ($result2 as $status) { $statuses .= ' ' . $status['status'] . ','; } $individual['status'] = preg_replace($pattern, '', $statuses); } fputcsv($fp, $individual); } Но эти телодвижения занимают уйму времени. Но если проделывать данную операцию в phpmyadmin то такой экспорт занимает буквально 30 секунд. И вот вопрос в том, можно ли как то так организовать выгрузку чтобы данный так же быстро выгружались на сайте. И вообще как myadmin так быстро делает такую выгрузку, в чем секрет?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2015, 18:29 |
|
||
|
Помогите реализовать экспорт как в phpmyadmin
|
|||
|---|---|---|---|
|
#18+
Небольшая поправка, код запроса вот такой SELECT i.individual_id, i.individual_barcode, concat(i.individual_firstname, ' ', i.individual_secondname, ' ', i.individual_surname), i.profession, i.political_allegiance, i.help_request, i.individual_birthday, i.individual_dateadded, rd.regionDistrict_name, loc.locality_name, d.district_name, com.name, mchs.medicine_chest_status_name FROM `individual` as i LEFT JOIN address as a ON (a.address_id = i.individual_Address_id) LEFT JOIN comments as com ON (com.comment_id = i.comment_id) LEFT JOIN regionDistrict as rd ON (rd.regionDistrict_id = a.address_RegionDistrict_id) LEFT JOIN locality as loc ON (loc.locality_id = a.address_Locality_id) LEFT JOIN district as d ON (d.district_id = a.address_District_id) LEFT JOIN medicine_chest as mch ON (mch.inidividual_id = i.individual_id) LEFT JOIN medicine_chest_statuses as mchs ON (mchs.medicine_chest_status_id = mch.medicine_chest_status_id) а сам скрипт записи такой oreach($result as $individualKey => $individual){ if($isPhone) { $telephones = ''; $sql = "SELECT concat(t.telephone_code, t.telephone_number) as phone FROM `individual_telephone` as it INNER JOIN telephone as t ON ( = it.telephone_id) WHERE individual_id = " . $individual['individual_id']." AND t. telephone_code <> 1"; $tels = $this->db->createCommand($sql)->queryAll(); foreach ($tels as $tel) { $telephones .= ' '.$tel['phone'].','; } $individual['phone'] = str_replace([' ', '-'], '', preg_replace($pattern, '', $telephones)); } if($isStatus) { $statuses = ''; $sql = "SELECT s.status_name as status FROM status_individual as si LEFT JOIN status as s ON (s.status_id = si.status_id) WHERE individual_id = " . $individual['individual_id']; $result2 = $this->db->createCommand($sql)->queryAll(); foreach ($result2 as $status) { $statuses .= ' ' . $status['status'] . ','; } $individual['status'] = preg_replace($pattern, '', $statuses); } fputcsv($fp, $individual); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2015, 18:35 |
|
||
|
Помогите реализовать экспорт как в phpmyadmin
|
|||
|---|---|---|---|
|
#18+
satanicmanесли проделывать данную операцию в phpmyadmin то такой экспорт занимает буквально 30 секундНе знаю, не знаю... Вы в phpmyadmin пихаете пхпшный код и выполняете туеву хучу запросов в цикле? Наверно, всё таки, нет. Потому утверждение о 30 секундах может относиться только к какому-то одному запросу из приведённого кода. Или, в phpmyadmin Вы делаете вообще что-то другое (а не то, что приведено в коде), раз уж получаете там нужный вид экспорта. Наверно, так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2015, 20:26 |
|
||
|
Помогите реализовать экспорт как в phpmyadmin
|
|||
|---|---|---|---|
|
#18+
vkle, Sypex Dumper поробей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2015, 22:13 |
|
||
|
Помогите реализовать экспорт как в phpmyadmin
|
|||
|---|---|---|---|
|
#18+
kolyan2288vkle, Sypex Dumper поробей т е satanicman ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2015, 22:14 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=39139659&tid=1461314]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 394ms |

| 0 / 0 |
