mysql — функция PHP для возврата данных из базы данных в виде таблицы с табличными отношениями

У меня есть требование для функции PHP, которая берет таблицу или таблицы и необходимые столбцы из этих таблиц БД и возвращает HTML-таблицу, содержащую данные. Я знаю, как сделать это для одного стола, но я борюсь с тем, как сделать это более динамичным

Я думаю, что для одной таблицы будет иметь функцию, которая берет имя таблицы, а затем массив столбцов, а затем просто выбирает данные из таблицы, а затем перебирает их, создавая данные в виде HTML, а затем возвращает их из функции.

В качестве примера моя база данных имеет две таблицы; пользователи и заказы

users
|----------------------------|
|user_id|first_name|last_name|
|-------|----------|---------|

orders
|----------------------|
|order_id|user_id|total|
|--------|-------|-----|

Теперь с помощью функции, описанной выше, было бы легко сгенерировать таблицу для всех пользователей или заказов, но я хотел бы иметь функцию, с помощью которой я мог бы динамически объединять таблицы и например перечислите всех пользователей и количество заказов, которые они сделали или перечислите все заказы от пользователя x. Я знаю, что это было бы возможно со многими различными функциями, но я действительно заинтересован в разработке способа сделать это динамически и в основном строить все отношения как-то в программе, а затем иметь возможность вызывать одну функцию и запрашивать столбцы x, y и z

Мое мышление до сих пор будет (снова для этого примера) как-то определить, что number of orders for user i = count(order_id) where user_id = i

Надеюсь, что это имеет смысл, и спасибо заранее

5

Решение

INFORMATION_SCHEMA.KEY_COLUMN_USAGE таблица может использоваться для поиска всех связей внешнего ключа от конкретной таблицы к другим таблицам, например:

SELECT `TABLE_NAME`,
`COLUMN_NAME`,
`REFERENCED_TABLE_NAME`,
`REFERENCED_COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`
WHERE `TABLE_SCHEMA` = SCHEMA() -- current schema
AND `REFERENCED_TABLE_NAME` IS NOT NULL
AND `TABLE_NAME` = 'orders'; -- name of table to get relationships to other tables

Это должно вернуть что-то вроде следующего:

+--------------+-------------+-----------------------+------------------------+
| TABLE_NAME   | COLUMN_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
+--------------+-------------+-----------------------+------------------------+
| orders       | user_id     | users                 | user_id                |
+--------------+-------------+-----------------------+------------------------+

Выше может быть сделано в PHP, а затем результаты могут быть перебраны, чтобы динамически построить запрос, который выбирает из этих таблиц, объединяясь в перечисленных столбцах. Оставлю эту часть в качестве упражнения 😉

2

Другие решения

Вам не нужно было бы создавать функцию для сбора данных из первой таблицы, а затем их обтекания и получения данных из второй таблицы.
SQL может сделать это для вас одним попаданием в базу данных.
Все, что вам нужно сделать, это соединить две таблицы и получить нужные данные.
Если я правильно понял, что вам нужно, вы хотите получить идентификатор всех пользователей из первой таблицы и получить счет их заказов из второй таблицы.
Это может сделать простое соединение или выбор из обеих таблиц, и я предлагаю что-то вроде:

Select a.user_id, b.count(order_id)
FROM table1 as a, table2 as b
WHERE a.user_id = b.user_id
Group By a.user_id

Или вы можете присоединиться к столам и выполнить аналогичную задачу.
Я предполагаю, что вы получите доступ к базе данных из PHP-кода, так что попробуйте и отправьте мне свой отзыв.

1

Это легко реализовать, но мы должны исправить несколько вещей.
Наше требование:
1. Определите таблицы в соответствии с именем столбца.
2. Как мы можем присоединиться к этим столам.
3. Как устранить неоднозначность столбцов.

Решение:

Уникальное имя столбца для каждого поля или нет таблицы с повторяющимся именем столбца.
Для этого у нас должен быть фиксированный префикс таблицы для каждой таблицы.
например:
Ваше имя столбца может быть odr_orderid и usr_orderid.

Теперь, идентифицируя уникальные префиксы, мы можем идентифицировать таблицы.

Теперь возникает вопрос, как объединить эти таблицы

Чтобы решить это:
Создайте еще одну таблицу с сильными клавишами JOIN и типом JOin Left, right, inner или full.

Вот и все Теперь вы можете сделать запрос, как хотите.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector