Выберите данные из определенного периода времени в mysql и верните их в форме php

В настоящее время у меня есть набор данных, и я хотел создать на их основе отчет. Но для моего отчета требуется время с текущего (сегодня) 18:00 до 2:00 (следующего дня). Обычный запрос будет выбирать данные только до 12 часов утра. Это код, который я пробовал, но не работает. Могу я узнать, как правильно его выбрать? (Предположим, 26 октября - текущая дата, а 27 октября - следующий день, поэтому нам нужно выбрать данные только с 18:00:00 26 октября 2018 г. до 02:00:00 27 октября 2018 г.)

Вот моя база данных.

enter image description here

и вот то, чего хотел мой результат.

enter image description here

вот моя кодировка:

<div class="table-responsive" ><!-- table-responsive Starts -->
                <table class="table table-bordered table-hover" ><!-- table table-bordered table-hover Starts -->
                    <thead><!-- thead Starts -->

                        <tr>
                            <th>No:</th>
                            <th>Transaction No:</th>
                            <th>User ID:</th>
                            <th>Metallic Point (Debit):</th>
                            <th>Metallic Point (Credit):</th>
                            <th>DateTime:</th>

                        </tr>

                    </thead><!-- thead Ends -->
                    <tbody>


                            <?php
                            include_once '../tmkdashboard/includes/db.php';

                                $get_member = "SELECT * 
                                    FROM transaction_record_tpg
                                    WHERE collect_outlet = 'TMA' 
                                    AND timestamp >= DATEADD(HOUR,18,CONVERT(VARCHAR(10), GETDATE(),110))
                                    AND timestamp <= DATEADD(HOUR,2,CONVERT(VARCHAR(10), GETDATE()+1,110)) ";


                                $run_customer = mysqli_query($conn,$get_member);

                                $i = 0;

                                while($row_orders = mysqli_fetch_array($run_customer)){

                                $id = $row_orders['trans_id'];

                                $user = $row_orders['user_id'];

                                $debit = $row_orders['m_debit'];

                                $credit = $row_orders['m_credit'];

                                $date = $row_orders['collected_datetime'];

                                $i++;
                            ?>
                        <tr><!-- tr Starts -->

                            <td><?php echo $i; ?></td>
                            <td><?php echo $id; ?></td>
                            <td><?php echo $user; ?></td>
                            <td><?php echo $debit; ?></td>
                            <td><?php echo $credit; ?></td>
                            <td><?php echo $date; ?></td>


                        </tr><!-- tr Ends -->
                            <?php } ?>

                    </tbody>
                </table>
            </div>

Я удалил тег MySQL, поскольку ваша версия SQL явно является SQL Server.

Tim Biegeleisen 26.10.2018 05:46
0
1
489
2

Ответы 2

Вот версия вашего запроса, которая должна работать:

SELECT *
FROM transaction_record_tpg
WHERE
    collect_outlet = 'TMA' AND
    timestamp BETWEEN DATEADD(HOUR, 18, DATEDIFF(d, 0, GETDATE())) AND  -- 6pm today
                      DATEADD(HOUR, 26, DATEDIFF(d, 0, GETDATE()));     -- 2am tomorrow

Этот ответ работает путем добавления 18 часов (для 18:00) или 26 часов (для 2:00) к текущей дате в полночь.

Но он показывает, что mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, логическим значением, указанным в D: \ Application \ Apps \ xampp \ htdocs \ tmkdashboard \ report.php, так что мне следует изменить в этой части, чтобы вернуть данные?

louis 26.10.2018 05:58

@louis Ваш вопрос, похоже, был сосредоточен на части вашего кода, связанной с SQL. Я не проверял ваш скрипт на наличие других проблем, и моя сильная сторона - это не PHP-программирование. Если у вас есть другие серьезные проблемы с PHP, это может сработать в качестве другого вопроса позже.

Tim Biegeleisen 26.10.2018 06:00

Думаю, можно попробовать.

$start_time = date("Y-m-d 18:00:00");
$end_time = date("Y-m-d 02:00:00", strtotime("1 day"));
$get_member = "SELECT * 
           FROM transaction_record_tpg
           WHERE collect_outlet = 'TMA' 
           AND timestamp >= '{$start_time}'
           AND timestamp <= '{$end_time}' ";  
$run_customer = mysqli_query($conn,$get_member);
// add check error
if (!$run_customer) {
    printf("Error: %s\n", mysqli_error($conn));
    exit();
}

привет, я пробовал ваш метод, но (mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, логическое значение указано в) предупреждение продолжает отображаться

louis 26.10.2018 06:32

ты можешь проверить это

user10492874 26.10.2018 07:16

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