У меня есть некоторые иерархические данные, создали его таким образом:Возвращает массив, содержащий массив массивов объектов
CREATE TABLE `departments`
(`deperatment_id` INTEGER NOT NULL,
`department_name` varchar(32) NOT NULL);
INSERT INTO `departments`(`deperatment_id`, `department_name`)
VALUES (1, "HR"), (2, "Software"), (3, "Accounts");
CREATE TABLE `jobs` (`deperatment_id` INTEGER NOT NULL,
`job_id` INTEGER NOT NULL,
`job_name` varchar(32) NOT NULL);
INSERT INTO `jobs` (`deperatment_id`, `job_id`, `job_name`)
VALUES (1, 1, "Idiot"),
(1, 2, "Fool"),
(2, 3, "PHB"),
(2, 4, "Software guru"),
(2, 5, "PFY"),
(3, 6, "Number cruncher");
CREATE TABLE `peeps` (`job_id` INTEGER NOT NULL,
`peep_name` varchar(32) NOT NULL);
INSERT INTO `peeps`(`job_id` , `peep_name`)
VALUES(1, "Smith"),
(2, "Jones Major"),
(2, "Jones Minor"),
(4, "Mr. In-the-wrong-department"),
(4, "Mawg"),
(5, "William Topaz McGonagall"),
(6, "Blaise Pascal"),
(6, "Isaac Newton");
Итак, как вы можете видеть, может быть один или несколько отделов, каждый из которых может иметь один или больше рабочих мест, выполняемых одним или несколькими людьми.
Это аккуратные иерархии дерева, и я хочу, чтобы вернуть его в ответ на запрос AJAX, так что у меня есть три вложенные для петель, каждые из которых выдающего SELECT
заявления (ОБУЧАЕМОГО недоступен, так как он находится дом & я нахожусь в офисе , но я уверен, что вы можете визуализировать его, это достаточно просто).
У меня возникли проблемы с клиентской стороной, пытаясь добавить новую пустую запись и it was suggested, что я должен удалить массив объектов, as shown here.
Однако, что показано только на уровне глубины, поэтому для построения возвращаемого значения было достаточно одного SELECT
с while ($row = $stmt->fetch(PDO::FETCH_OBJ))
.
Как построить мое возвращаемое значение, которое будет вложенным массивом массива массивов объектов?
[Обновить] Я удалил предыдущую ссылку на скрипку, так как это смутило хотя бы одного человека.
Я хочу, чтобы вернуть массив отделов, каждый из которых содержит данные для этого отдела, а также массив заданий, каждый из которых содержит данные для этой работы, а также массив людей, которые выполняют эту работу
[ Обновление] Вот для вас 50 очков.
Ответы ЙельдарКурмангалиева на 90% завершены, но мне просто нужно некоторое просветление на две небольшие точки.
его SQL не показывает данные, связанные с
departments
. Я подозреваю, что мне просто нужно(INNER?) JOIN departments.*
. Но какая именно команда SQL?Что такое код PHP? Я подозреваю,
$result = $sqlQuery->fetchAll(PDO::FETCH_ASSOC);
или аналогичного
Btw, есть a fiddle для SQL
Моих лучшие усилия возвращать только плоский массив, а не вложенное дерево как отправленный ответ показывает :-(
[Обновить] Спасибо за отличный ответ. Чтобы помочь другим, я опубликовал рабочую скрипку по адресу http://phpfiddle.org/main/code/xfdj-wthc
Обратите внимание, что solutio n поддерживает несколько внешних ключей, где у меня есть только один. Я мог бы упростить код для личного использования, но спасибо @trincot за то, что он настолько гибкий, что может быть полезным для других.
Я не могу понять, что проблема здесь. Если вам нужно вернуть полные данные, это возможно, выбрав отделы, чем для каждого отдела, выбирающего задания, и для каждой работы, выбрав людей. После этого вы json_encode и возвращаетесь как строка к функции JavaScript Ajax. – DDeme
Whooops !! просто 'SELECT * FROM department'? Знаете ли вы, это звучит правильно! Извините, здесь 7 утра, и у меня было 2,5 часа езды. Я все еще должен спать. Не стесняйтесь публиковать это как ответ, в свете моего обновления вопроса. – Mawg
@DDeme, это сработает, но с большими наборами данных это приведет к множеству выполнений запросов (для каждого задания в каждом отделе вы выполнили бы запрос для извлечения peeps). Я думаю, что более эффективно получать все данные с одним запросом, а затем строить из них структуру вывода. – trincot