0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50

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

15.03.2017, 20:03. Показов 2102. Ответов 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
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
15.03.2017, 20:15  [ТС]
Я бы сделал так, но тогда, сами понимаете, будут выведены не все значения, а лишь последние.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
        $complaints_arr = array(
                "id" => $complaints_id,
                "offer_id" => $complaints_offer_id,
                "user_name" => "$complaints_user_name",
                "text" => "$complaints_text",
                "date" => $complaints_date,
                "reply" => array(
                    "reply_name" => "$complaints_reply_name",
                    "reply_text" => "$complaints_reply_text",
                    "reply_date" => $complaints_reply_date
                )
            );
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
17.03.2017, 00:28
А что значат символы => ?
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
17.03.2017, 09:18
Цитата Сообщение от oleg rus Посмотреть сообщение
А что значат символы => ?
Массивы
1
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
17.03.2017, 11:39
vladly, по какому полю объединяются эти две таблицы?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
17.03.2017, 12:16
Цитата Сообщение от vladly Посмотреть сообщение
чтобы все выглядело так
чтобы все выглядело именно так, используйте json_encode для массива с вашими данными..
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
17.03.2017, 20:53  [ТС]
Ребят, помогите, пожалуйста, решить проблему!

Вывожу данные из бд следующим способом:
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
$arr = array();
    $arr2 = array();
    $offers_query = "SELECT * FROM offers WHERE company_id = '2'";
    $offers_result = $mysqli->query($offers_query);
    while($offers_row = $offers_result->fetch_array(MYSQLI_ASSOC)) {
        $offer_id = $offers_row['id'];
        
        $complaints_query = "SELECT * FROM complaints WHERE offer_id = '$offer_id'";
        $complaints_result = $mysqli->query($complaints_query);
        while($complaints_row = $complaints_result->fetch_array(MYSQLI_ASSOC)) {
            $complaint_id = $complaints_row['id'];
            
            array_push($arr, $complaints_row);
            
            $complaints_reply_query = "SELECT * FROM complaints_reply WHERE complaint_id = '$complaint_id'";
            $complaints_reply_result = $mysqli->query($complaints_reply_query);
            while($complaints_reply_row = $complaints_reply_result->fetch_array(MYSQLI_ASSOC)) {
                
                array_push($arr2, $complaints_reply_row);
                
            }
            $arr[0]['reply'] = $arr2;
        }
        
    }
    
    
    echo json_encode($arr, JSON_UNESCAPED_UNICODE);
На выходе получаю это:

JSON
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[
        {
            "id":"1",
            "offer_id":"1",
            "user_name":"Петр",
            "text":"Некомпетентный сотрудник",
            "date":"12342",
            "reply":[
                {
                    "id":"1",
                    "complaint_id":"1",
                    "reply_name":"Женя",
                    "reply_text":"Разберемся",
                    "reply_date":"23897289"
                },
                {
                    "id":"2",
                    "complaint_id":"1",
                    "reply_name":"Макс",
                    "reply_text":"Это точно",
                    "reply_date":"2676723"
                },
                {
                    "id":"6",
                    "complaint_id":"1",
                    "reply_name":"Дима",
                    "reply_text":"Ответили уже",
                    "reply_date":"23321"
                },
                {
                    "id":"5",
                    "complaint_id":"2",
                    "reply_name":"Стас",
                    "reply_text":"ОКЭ",
                    "reply_date":"23232"
                }
            ]
        },
        {
            "id":"2",
            "offer_id":"2",
            "user_name":"Иван",
            "text":"Ужасный сотрудник!",
            "date":"2324123"
        }
    ]
Почти идеально... НО надо, чтобы было так:

JSON
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[
        {
            "id":"1",
            "offer_id":"1",
            "user_name":"Петр",
            "text":"Некомпетентный сотрудник",
            "date":"12342",
            "reply":[
                {
                    "id":"1",
                    "complaint_id":"1",
                    "reply_name":"Женя",
                    "reply_text":"Разберемся",
                    "reply_date":"23897289"
                },
                {
                    "id":"2",
                    "complaint_id":"1",
                    "reply_name":"Макс",
                    "reply_text":"Это точно",
                    "reply_date":"2676723"
                },
                {
                    "id":"6",
                    "complaint_id":"1",
                    "reply_name":"Дима",
                    "reply_text":"Ответили уже",
                    "reply_date":"23321"
                }
            ]
        },
        {
            "id":"2",
            "offer_id":"2",
            "user_name":"Иван",
            "text":"Ужасный сотрудник!",
            "date":"2324123",
            "reply":[
                {
                    "id":"5",
                    "complaint_id":"2",
                    "reply_name":"Стас",
                    "reply_text":"ОКЭ",
                    "reply_date":"23232"
                }
            ]
        }
    ]
То есть каждому главному id соответствует свой complaint_id
 Комментарий модератора 
Дублирование тем запрещено


Добавлено через 12 минут
Kerry_Jr, id из таблицы complaints соответствует complaint_id из таблицы complaints_reply. Есть идеи?((
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
17.03.2017, 20:57
Цитата Сообщение от vladly Посмотреть сообщение
Есть идеи?
Конечно есть. Первая - вытащить все данные одним запросом. Но для этого мне нужно знать структуру все трех таблиц.
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
17.03.2017, 20:59  [ТС]
Kerry_Jr, я не раз пытался (через inner join)... можете помочь правильно составить запрос?
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
17.03.2017, 21:05
vladly, я написал выше, что мне нужно: структуру таблиц, а ещё лучше - какие столбцы из каких таблиц будут использоваться.
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
17.03.2017, 21:06  [ТС]
Kerry_Jr, Структура таблиц:

offers:
#Имя
1id
2company_id
3category
4subcategory_1lvl
5subcategory_2lvl
6price
7description
8x_coordinate
9y_coordinate
10premium
11views
12phone
13date

complaints:
#Имя
1id
2offer_id
3user_name
4text
5date

complaints_reply:
#Имя
1id
2complaint_id
3reply_name
4reply_text
5reply_date

Я просто не сразу видел Ваш ответ. Из таблицы offers берется id (where company_id = '2' (например)), из таблицы complaints берется все (where offer_id = id из таблицы offers), из таблицы complaints_reply берется все (where complaint_id = id из таблицы complaints).

Надеюсь, понятно!
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
17.03.2017, 21:11  [ТС]
Kerry_Jr, понятна структура и какие нужны строки?
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
18.03.2017, 12:30
vladly, я пораскинул мозгами и пришёл к выводу, что один запрос будет слишком громоздким и выборка тоже. Сейчас соберу мозги обратно и попробую помочь, если ещё нужно.
1
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
18.03.2017, 15:32  [ТС]
Kerry_Jr, да, еще очень нужно!

Я делаю так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$arr = array();
    $offers_query = "SELECT cm.id AS cmID, cm.offer_id, cm.user_name, cm.text, cm.date FROM complaints cm INNER JOIN offers of ON of.id = cm.offer_id WHERE of.company_id = '2'";
    $offers_result = $mysqli->query($offers_query);
    while($offers_row = $offers_result->fetch_array(MYSQLI_ASSOC)) {
        $offer_cmID = $offers_row['cmID'];
        
        array_push($arr, $offers_row);
            
        $offers_query2 = "SELECT * FROM complaints_reply WHERE complaint_id = '$offer_cmID'";
        $offers_result2 = $mysqli->query($offers_query2);
        while($offers_row2 = $offers_result2->fetch_array(MYSQLI_ASSOC)) {
            
            $arr[] = $offers_row2;
            
        }
    }
    
    echo json_encode($arr, JSON_UNESCAPED_UNICODE);
Тогда выводится все в правильном порядке, но не в том формате, в котором надо.
Я попытался заменить
PHP
1
$arr[] = $offers_row2;
на
PHP
1
$arr[0]['reply'] = $offers_row2;
, тогда выводится в правильном формате, но неправильном порядке! Вообще беда....
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
18.03.2017, 15:42
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
$reply_sep = '|><|';
$field_sep = '<||>';
 
$sql = 'SELECT *, `c_r`.`reply` '
        . 'FROM `compliants` '
        . 'INNER JOIN ('
        . 'SELECT `compliants_reply`.`compliant_id`, '
        . 'GROUP_CONCAT(CONCAT_WS("' . $field_sep . '", `id`,`compliant_id`, `reply_name`, `reply_text`, `reply_date`) SEPARATOR "' . $reply_sep . '") `reply`'
        . 'FROM `compliants_reply` GROUP BY `compliant_id`) `c_r` '
        . 'ON `compliants`.`id` = `c_r`.`compliant_id` '
        . 'WHERE `offer_id` IN (SELECT GROUP_CONCAT(`id`) FROM `offers` WHERE `company_id` = 2 GROUP BY `company_id`)';
 
$result = $mysqli->query($sql) or die($mysqli->error);
$arr = [];
$reply = ['id', 'compliant_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;
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
18.03.2017, 15:59  [ТС]
Kerry_Jr, ПОЧТИ все хорошо, формат тот, какой надо, но не все выводится, а только значения для complaint_id = 1 (для complaint_id = 2 не выводятся)
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
18.03.2017, 16:11
vladly, покажите результат.
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
18.03.2017, 16:20  [ТС]
Kerry_Jr,
JSON
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
31
32
[
        {
            "id":"1",
            "offer_id":"1",
            "user_name":"Петр",
            "text":"Некомпетентный сотрудник",
            "date":"12342",
            "reply":[
                {
                    "id":"1",
                    "compliant_id":"1",
                    "reply_name":"Женя",
                    "reply_text":"Разберемся",
                    "reply_date":"23897289"
                },
                {
                    "id":"2",
                    "compliant_id":"1",
                    "reply_name":"Макс",
                    "reply_text":"Это точно",
                    "reply_date":"2676723"
                },
                {
                    "id":"6",
                    "compliant_id":"1",
                    "reply_name":"Дима",
                    "reply_text":"Ответили уже",
                    "reply_date":"23321"
                }
            ]
        }
    ]
Добавлено через 3 минуты
Kerry_Jr, то есть нет этой части:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
            "id":"2",
            "offer_id":"2",
            "user_name":"Иван",
            "text":"Ужасный сотрудник!",
            "date":"2324123",
            "reply":[
                {
                    "id":"5",
                    "complaint_id":"2",
                    "reply_name":"Стас",
                    "reply_text":"ОКЭ",
                    "reply_date":"23232"
                }
            ]
        }
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
18.03.2017, 16:23
vladly, вы везде правильно заменили имена таблиц и столбцов?
1
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 50
18.03.2017, 16:24  [ТС]
Kerry_Jr, да, иначе код не запускался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.03.2017, 16:24
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru