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

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

15.03.2017, 20:03. Показов 2192. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru