2015-02-21 1 views
0

То, что я пытаюсь выполнить, показывает правильный результат. У меня есть две разные таблицы, orders и orders_products.Сопоставьте две даты без секунд и показать результат

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

orders_products пример.

id user_id user_name quantity product price order_date 
19 12 Test 1 Advanced game overlay  20  2015-02-17 19:31:16 
20 12 Test 1 Advanced standby overlay 20  2015-02-17 19:31:16 
21 12 Test 1 Description images   15  2015-02-17 19:31:16 

заказы примера.

id user_id user_name user_twitch user_email specific_color specific style webcam_size monitor_resolution faster_delivery order_message order_date user_ip order_status order_paid 
4 12 Test John Doe Test [email protected] Blue random information 1024x768 0 ... 2015-02-17 19:31:14 xx.xx.xx.xx 1 0 

Если сравнить order_date между этими двумя таблицами orders.order_date составляет 2 секунды медленнее, а информация не будет отображаться.

Я пытаюсь показать страницу «Ваши заказы» и SUM() общее количество каждого заказа и перечисленных продуктов.

$sth = $conn->prepare(
    "SELECT DATE_FORMAT(order_date, '%Y %m %d %H:%i') AS date_convert " 
    . "FROM users, orders " 
    . "WHERE users.user_id = :user_id AND orders.user_id = :user_id" 
); 
$date = date('Y:m:d H:i', strtotime($result['order_date'])); 

$sth = $conn->prepare(
    "SELECT SUM(price) AS price_sum " 
    . "FROM orders_products " 
    . "WHERE user_id = :user_id AND order_date = :order_date" 
); 
$sth->bindValue(':user_id', $row['user_id'], PDO::PARAM_INT); 
$sth->bindValue(':order_date', $date, PDO::PARAM_STR); 
+1

У вас есть 'orders' таблицу и' orders_products' таблицу и не имеют ' OrderId' соединяющий их? Вам нужно исправить свои данные. –

+0

Я согласен с Гордоном. И вот способ, которым должен был быть написан код ... 'SELECT @ts: = NOW(); INSERT INTO ... (... @ ts ...); INSERT (... @ ts ...). Таким образом, два ВСТАВКИ имеют одно и то же время. –

+0

Даже лучше, чем мой предыдущий комментарий, заключается в том, что вы _should_ создали идентификатор для 'orders', а затем включили этот идентификатор в соответствующие строки' orders_products'. Затем 'JOIN' на них - никакого сравнения времени не нужно! И никакой двусмысленности, если кому-то удается разместить два ордера за одну секунду. –

ответ

0

Просто сравните части даты и игнорировать раз (и исправить формат даты):

// Use Y-m-d as that is the format MySQL is expecting 
$date = date('Y-m-d', strtotime($result['order_date']); 
// Use DATE() to only use the date poprtion of the datetime value 
$sth = $conn->prepare("SELECT SUM(price) AS price_sum FROM orders_products WHERE user_id = :user_id AND DATE(order_date) = :order_date"); 
$sth->bindValue(':user_id', $row['user_id'], PDO::PARAM_INT); 
$sth->bindValue(':order_date', $date, PDO::PARAM_STR); 
Смежные вопросы