powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите реализовать экспорт как в phpmyadmin
6 сообщений из 6, страница 1 из 1
Помогите реализовать экспорт как в phpmyadmin
    #39139587
satanicman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток. Есть БД с более чем 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 так быстро делает такую выгрузку, в чем секрет?)
...
Рейтинг: 0 / 0
Помогите реализовать экспорт как в phpmyadmin
    #39139590
satanicman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшая поправка, код запроса вот такой


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);
}
...
Рейтинг: 0 / 0
Помогите реализовать экспорт как в phpmyadmin
    #39139624
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
satanicmanесли проделывать данную операцию в phpmyadmin то такой экспорт занимает буквально 30 секундНе знаю, не знаю... Вы в phpmyadmin пихаете пхпшный код и выполняете туеву хучу запросов в цикле? Наверно, всё таки, нет. Потому утверждение о 30 секундах может относиться только к какому-то одному запросу из приведённого кода. Или, в phpmyadmin Вы делаете вообще что-то другое (а не то, что приведено в коде), раз уж получаете там нужный вид экспорта. Наверно, так.
...
Рейтинг: 0 / 0
Помогите реализовать экспорт как в phpmyadmin
    #39139658
kolyan2288
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, Sypex Dumper поробей
...
Рейтинг: 0 / 0
Помогите реализовать экспорт как в phpmyadmin
    #39139659
kolyan2288
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolyan2288vkle, Sypex Dumper поробей
т е satanicman
...
Рейтинг: 0 / 0
Помогите реализовать экспорт как в phpmyadmin
    #39139674
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyan2288kolyan2288vkle, Sypex Dumper поробей
т е satanicmanЧто это за сатанистский мануал и нафига он мне сдался?

Дампером пользуюсь лет десять, спасибо. Только для других целей.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите реализовать экспорт как в phpmyadmin
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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