#php #mysql #pdo
#php #mysql #pdo
Вопрос:
новое здесь. Я сделаю все возможное, чтобы сформулировать этот вопрос как можно более четко.
Я создаю базу данных заказов, в этой базе данных у меня есть две таблицы.
Таблица 1 (заказы) содержит следующие столбцы:
id, name, datetime
Таблица 2 (упорядоченные элементы) содержит следующие столбцы:
id, orderid, itemname, price
orderid
в таблице 2 находится id
в таблице 1
Мне нужно запустить запрос MySQL, который выводит массив, который выглядит следующим образом:
orderid, datetime, name, itemname, price
Вот как я выбираю заказы:
$date1 = "2020-09-29"; //$_GET["date1"];
$date2 = "2020-09-30"; //$_GET["date2"];
include 'dbconfig.php';
$pdo = new PDO("mysql:charset=utf8mb4;host=$servername;dbname=$dbname", $username, $password);
$pdo = $pdo->prepare("SELECT id, name datetime FROM orders WHERE datetime BETWEEN :date1 AND :date2");
$pdo->execute(['date1' => $date1,
'date2' => $date2]);
while ($row = $pdo->fetch()) {
$data[] = $row;
}
и вот как я выбираю элементы заказа:
$sql = "SELECT orderid, itemname, price FROM orderitems WHERE orderid=:id";
Как мне объединить их и заставить их экспортировать массив так, как я хочу?
Ответ №1:
Вы уже можете выполнить объединение в SQL, и вам нужно только отправить этот один запрос в базу данных, а не один для заказов, а затем по одному для деталей заказа. Это намного быстрее. Этот запрос будет:
SELECT o.id orderid,
o.datetime,
o.name,
oi.itemname,
oi.price
FROM orders o
INNER JOIN ordered oi
ON oi.orderid = o.id
WHERE o.datetime >= :date1
AND o.datetime < :date2;
И не используйте BETWEEN
для диапазонов временных меток. Если ваша верхняя граница равна 2020-09-30, вы получите только записи с 2020-09-30 00:00:00.000. Но вы пропустите, например, 2020-09-30 01:01:00.000. Используйте <
для сравнения верхней границы и следующего дня, т.Е. 2020-10-01, в качестве значения.