Как мне объединить -все- таблицы в MySQL?

Я хочу создать базу данных о ВВП, населении, ИПЦ и т. д. Для 100 городов. Кроме того, пользователь может указать в HTML, какие переменные ему нужны. Цель 1: конечный пользователь может запросить данные о ВВП, населении и ИПЦ для всех 100 городов в 2017 году. Цель 2: конечный пользователь запрашивает ВВП, население, ИПЦ ... для города_1 за 2000-2017 гг. (Весь период). Я решил создать по одной таблице для каждого города. В городе есть несколько полей для года, ВВП, населения, cpi ... Следовательно, цель 2 может быть достигнута следующим образом: я могу собирать значения из поля, введенного конечным пользователем, то есть: category{all, GDP, pop}, city{all, city_1, city_2}, time{all, 2017, 2016,...}.

$query = "SELECT * FROM $query where year=$time";     
$qry_result=$mysqli->query($query);  

Однако я не уверен, как отображать цель 1. Поскольку городов могут быть от сотен до тысяч, это не лучший способ перечислять все таблицы. Я думал, что мне нужен код вроде

SELECT * FROM (SHOW TABLES) FROM $year=$time;

Очевидно, этот код не может работать. Итак, я думаю, что слияние может сработать. Например, если я могу объединить все таблицы или объединить все таблицы с годом = "значение от пользователя", проблема будет решена. Однако, поскольку городов так много, я не уверен, что это единственный способ ввести все команды слияния одну за другой, разве нет кода для «слияния ВСЕХ» в одной базе данных? Спасибо, если вы можете помочь мне с частью слияния или даже с тем, как структурировать базу данных.

Я решил создать по одной таблице для каждого города Я считаю, что это неправильное решение. Создайте единую таблицу, содержащую все города
RiggsFolly 21.05.2018 09:45

Но как жить с годами? Например, пользователь запрашивает ВВП для города за последние 50 лет, мне еще нужно объединить 50 лет ....

user9821719 21.05.2018 09:53

Нет, вам не нужно ничего «сливать», при работе с базами вы фильтр из огромного набора результатов. Итак, здесь вы берете все лет и указываете правило фильтрации, чтобы выбрать только те годы, которые действительно запрошены.

arkascha 21.05.2018 09:55

вы имеете в виду что-то вроде SELECT * FROM year1, year2, ...?

user9821719 21.05.2018 10:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваши данные должны быть в одной таблице и выглядеть примерно так:

Стол cities

| city    | year | gdp | population | CPI |
-------------------------------------------
| London  | 2016 | 1.0 | XXY        | XXX |
| London  | 2017 | 1.0 | XXY        | XXX |
| London  | 2018 | 1.1 | XXZ        | XXX |
| Paris   | 2018 | 1.1 | XXZ        | XXX |

Запрос, используя что-то вроде:

SELECT gdp FROM cities WHERE city = 'London' AND year = 2016;
// Get GDP for London in 2016

а также

SELECT * FROM cities WHERE city = 'London' AND year BETWEEN 2016 AND 2018;
// Get all data for London for years 2016-2018

А для других людей, которым нужно выбрать все периоды или все города, вы можете использовать год = год, город = город.

user9821719 23.05.2018 04:52

@ user9821719 Если вам нужны все данные из таблицы, просто выполните "SELECT * FROM tablename;" Не нужно добавлять дополнительные условия, например "год = год".

Joel L 23.05.2018 09:35

Другие вопросы по теме