Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50

Преобразование выборки к определённому виду

15.03.2017, 20:03. Показов 2025. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, ребят!

Как можно добавить в array данные из БД, чтобы все выглядело так:



Есть две таблицы: complaints и complaints_reply. Из таблицы complaints выводятся id, offer_id, text, date. Из таблицы complaints_reply выводятся в "realy" значения reply_name, reply_text, reply_date
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2017, 20:03
Ответы с готовыми решениями:

Результат выборки передать GET запросом для изменения условий другой выборки
Есть такая таблица menu: Таким запросом вывожу на страницу: <?php include ("bd.php"); function display_menus($parent = 0) ...

Преобразование строки к URL-виду
Приветствую, ребята! Недавно проскальзовала тема по поводу преобразования строки к виду URL, например: привет мир =...

Преобразование текста к читаемому виду
имеется вот такой текст : 1. An unnamed cell2. putin3. Zzz4. AMG5. An unnamed cell6. China7. КУРЛЫК КУРЛЫК8. liar9. dim4ik10. karamelka ...

34
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
18.03.2017, 17:14
Студворк — интернет-сервис помощи студентам
vladly, оказалось, всё просто
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$reply_sep = '|><|';
$field_sep = '<||>';
 
$sql = 'SELECT *, `c_r`.`reply` '
        . 'FROM `complaints` '
        . 'INNER JOIN ('
        . 'SELECT `complaints_reply`.`complaint_id`, '
        . 'GROUP_CONCAT(CONCAT_WS("' . $field_sep . '", `id`,`complaint_id`, `reply_name`, `reply_text`, `reply_date`) SEPARATOR "' . $reply_sep . '") `reply`'
        . 'FROM `complaints_reply` GROUP BY `complaint_id`) `c_r` '
        . 'ON `complaints`.`id` = `c_r`.`complaint_id` '
        . 'WHERE `offer_id` IN (SELECT `id` FROM `offers` WHERE `company_id` = 2)';
 
$result = $mysqli->query($sql);
if ($mysqli->errno)
    die($mysqli->error);
$arr = [];
$reply = ['id', 'complaint_id', 'reply_name', 'reply_text', 'reply_date'];
while ($row = $result->fetch_assoc()) {
    $temp = array_splice($row, 0, 5);
 
    foreach (explode($reply_sep, $row['reply']) as $item) {
        $temp['reply'][] = array_combine($reply, explode($field_sep, $item));
    }
    $arr[] = $temp;
}
 
$json = json_encode(array_values($arr), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;
1
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
19.03.2017, 01:34  [ТС]
Kerry_Jr, ОГРОМНЕЙШЕЕ СПАСИБО! ВЫ ОЧЕНЬ ВЫРУЧИЛИ!!!!!!!!!!!!!

Добавлено через 7 часов 48 минут
Kerry_Jr, Вы не поверите, возникла проблема... Я не продумал тот факт, что таблица complaints_reply может быть пустая. Но у нас ведь идет связка
PHP
1
'ON `complaints`.`id` = `c_r`.`complaint_id` '
. В таком случает данные из таблицы complaints не выводятся. Вы не знаете, как решить?
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.03.2017, 10:32
vladly, пробуйте
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$reply_sep = '|><|';
$field_sep = '<||>';
 
$sql = 'SELECT `id`, `offer_id`, `user_name`, `text`, `date`, `c_r`.`reply` '
     . 'FROM `complaints` '
     . 'LEFT JOIN ('
         . 'SELECT `complaint_id`, GROUP_CONCAT('
             .'CONCAT_WS("' . $field_sep . '", `id`,`complaint_id`, `reply_name`, `reply_text`, `reply_date`) SEPARATOR "' . $reply_sep . '") `reply`'
         . 'FROM `complaints_reply` GROUP BY `complaint_id`) `c_r` '
     . 'ON `complaints`.`id` = `c_r`.`complaint_id` '
     . 'WHERE `offer_id` IN (SELECT `id` FROM `offers` WHERE `company_id` = 2)';
 
$result = $mysqli->query($sql);
if ($mysqli->errno)
    die($mysqli->error);
$arr = [];
$reply = ['id', 'complaint_id', 'reply_name', 'reply_text', 'reply_date'];
while ($row = $result->fetch_assoc()) {
    $temp = array_splice($row, 0, 5);
    $temp['reply'] = [];
    if (!empty($row['reply'])) { 
        foreach (explode($reply_sep, $row['reply']) as $item) {
            $temp['reply'][] = array_combine($reply, explode($field_sep, $item));
        }
    } 
    $arr[] = $temp;
}
 
$json = json_encode(array_values($arr), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
19.03.2017, 12:40  [ТС]
Kerry_Jr, возвращает null
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.03.2017, 13:06
vladly, мне бы вашу базу, хотя б кусочек. Я создал у себя по тем данным, что есть здесь, и у меня вроде всё выводится.
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
19.03.2017, 13:11  [ТС]
Kerry_Jr,
Я не умею здесь таблицы рисовать

offers:
idcompany_idcategorysubcategory_1lvlsubcategory_2lvlpricedescriptionx_coordinatey_coordinatepremiumviewsphonedate
12categorysubcategory_1lvlsubcategory_2lvl10description  true1027327822673767
22category2subcategory_1lvl2subcategory_2lvl230description2  false1200088797856

complaints:
idoffer_iduser_iduser_nametextdate
911цуаццуацуа2323
1011цуацуацуацуа2332

complaints_reply:
idcomplaint_idreply_user_typereply_user_idreply_user_namereply_textreply_date
89еккеекн6767чаекелке67

Я в таблицы добавил некоторые строки, в Вашем новом коде я их учитывал
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.03.2017, 14:24
Цитата Сообщение от vladly Посмотреть сообщение
Я в таблицы добавил некоторые строки, в Вашем новом коде я их учитывал
А это как?
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
19.03.2017, 14:32  [ТС]
Kerry_Jr,
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$sql = 'SELECT * `c_r`.`reply` '
     . 'FROM `complaints` '
     . 'LEFT JOIN ('
        . 'SELECT `complaint_id`, GROUP_CONCAT('
            . 'CONCAT_WS("' . $field_sep . '", `id`,`complaint_id`, `reply_user_type`, `reply_user_id`, `reply_user_name`, `reply_text`, `reply_date`) SEPARATOR "' . $reply_sep . '") `reply`'
        . 'FROM `complaints_reply` GROUP BY `complaint_id`) `c_r` '
     . 'ON `complaints`.`id` = `c_r`.`complaint_id` '
     . 'WHERE `offer_id` IN (SELECT `id` FROM `offers` WHERE `company_id` = 2)';
 
$result = $mysqli->query($sql);
if ($mysqli->errno)
    die($mysqli->error);
$arr = [];
$reply = ['id', 'complaint_id', 'reply_user_type', 'reply_user_id', 'reply_user_name', 'reply_text', 'reply_date'];
while ($row = $result->fetch_assoc()) {
    $temp = array_splice($row, 0, 6);
    $temp['reply'] = [];
    if (!empty($row['reply'])) {
        foreach (explode($reply_sep, $row['reply']) as $item) {
            $temp['reply'][] = array_combine($reply, explode($field_sep, $item));
        }
    }
    $arr[] = $temp;
}
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.03.2017, 14:41

Не по теме:

Цитата Сообщение от vladly Посмотреть сообщение
Я не умею здесь таблицы рисовать
Тэг таблицы (особенно внимательно читать на синем фоне)
Опции таблиц (Эту тему можно от корки до корки, как и предыдущую)



Добавлено через 7 минут
vladly, после SELECT * запятой нет.
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
19.03.2017, 14:47  [ТС]
Kerry_Jr, тогда синтаксическая ошибка You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`c_r`.`reply` FROM `complaints` LEFT JOIN (SELECT `complaint_id`, GROUP_CONCAT(C'

Добавлено через 1 минуту
Kerry_Jr, https://www.cyberforum.ru/post10229980.html здесь Вы ставили запятую
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.03.2017, 15:01
vladly, смотрю я на вашу базу и думаю, зачем вам таблица complaints_reply?
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
19.03.2017, 15:09  [ТС]
Kerry_Jr, это ответы на жалобы. То есть жалоба может быть одна (в таблице complaints одна строка), а ответов на нее много (в таблице complaints_reply много строк)
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.03.2017, 15:26
Лучший ответ Сообщение было отмечено vladly как решение

Решение

vladly,
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$arr = [];
 
$sql_offers = 'SELECT `id` FROM `offers` WHERE `company_id` = 2';
$result_offers = $mysqli->query($sql_offers) or die($mysqli->error);
while ($row_offers = $result_offers->fetch_assoc()) {
    $sql_complaints = 'SELECT * FROM `complaints` WHERE `offer_id`=' . $row_offers['id'];
    $result_complaints = $mysqli->query($sql_complaints) or die($mysqli->error);
    while ($row_complaints = $result_complaints->fetch_assoc()) {
        $sql_reply = 'SELECT * FROM `complaints_reply` WHERE `complaint_id`=' . $row_complaints['id'];
        $result_reply = $mysqli->query($sql_reply) or die($mysqli->error);
        $row_complaints['reply'] = [];
        while ($row_reply = $result_reply->fetch_assoc()) {
            $row_complaints['reply'][] = $row_reply;
        }
        $arr[] = $row_complaints;
    }
}
 
$json = json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
 
echo '<pre>', $json;
1
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
19.03.2017, 15:47  [ТС]
Kerry_Jr, Вы волшебник... Еще раз спасибо!
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.03.2017, 16:21
vladly,
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2017, 16:21
Помогаю со студенческими работами здесь

Преобразование Даты к заданному виду
Доброго дня! Есть время в unix формате , к примеру : 1366037818 Подскажите пожалуйста как перевести дату к такому виду:...

Преобразование матрицы к треугольному виду
Добрый вечер! Помогите пожалуйста, вопрос собственно в следующем. Нужно прямоугольную матрицу преобразовать в треугольную. Т.е. массив...

Преобразование матрицы к треугольному виду
Здравствуйте, возникла нестандартная задача: преобразовать матрицу (разреженную) к треугольному виду (все ненулевые элементы поместить на и...

Преобразование уравнения к каноническому виду
Есть уравнение в полярных координатах p=3(1+cos(t)), строю график и понимаю что полученная линия кардиоида. Дальше надо найти уравнение...

Преобразование многомерного массива к уникальному виду
Здравствуйте! Как мне преобразовать массив чтобы в нем остались только элементы у которых не повторяется название - $array Т.е...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru