Я хочу создать базу данных о ВВП, населении, ИПЦ и т. д. Для 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;
Очевидно, этот код не может работать. Итак, я думаю, что слияние может сработать. Например, если я могу объединить все таблицы или объединить все таблицы с годом = "значение от пользователя", проблема будет решена. Однако, поскольку городов так много, я не уверен, что это единственный способ ввести все команды слияния одну за другой, разве нет кода для «слияния ВСЕХ» в одной базе данных? Спасибо, если вы можете помочь мне с частью слияния или даже с тем, как структурировать базу данных.
Но как жить с годами? Например, пользователь запрашивает ВВП для города за последние 50 лет, мне еще нужно объединить 50 лет ....
Нет, вам не нужно ничего «сливать», при работе с базами вы фильтр из огромного набора результатов. Итак, здесь вы берете все лет и указываете правило фильтрации, чтобы выбрать только те годы, которые действительно запрошены.
вы имеете в виду что-то вроде SELECT * FROM year1, year2, ...?






Ваши данные должны быть в одной таблице и выглядеть примерно так:
Стол 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 Если вам нужны все данные из таблицы, просто выполните "SELECT * FROM tablename;" Не нужно добавлять дополнительные условия, например "год = год".