Как проверить повторяющиеся даты? - PullRequest
0 голосов
/ 09 мая 2020

Я не хочу, чтобы MYSQL отображало повторяющиеся даты.

Мой массив дат:

Array
(
    [0] => Array
        (
            [date] => 2020-05-04 00:00:00
        )

    [1] => Array
        (
            [date] => 2020-05-05 00:00:00
        )

    [2] => Array
        (
            [date] => 2020-05-03 00:00:00
        )

    [3] => Array
        (
            [date] => 2020-05-06 00:00:00
        )

    [4] => Array
        (
            [date] => 2020-05-04 00:00:00
        )

    [5] => Array
        (
            [date] => 2020-05-05 00:00:00
        )

    [6] => Array
        (
            [date] => 2020-05-05 00:00:00
        )
)

Мой PHP и код MYSQLI:

$c = Database::$database->query("
    SELECT 
        `date`
    FROM `payments` 
    WHERE 
        `currency` = '{$this->settings->payment->currency}' 
    AND 
        WEEK(`date`) = WEEK(CURRENT_DATE())")->fetch_all(MYSQLI_ASSOC);


foreach ($c as $key => $value) {
    $current_date[] = $value['date'];
    $current_sum[] = Database::$database->query("SELECT COUNT(*) AS sum FROM `payments` WHERE `currency` = '{$this->settings->payment->currency}' AND `date` = '{$value['date']}'")->fetch_assoc();
}

Что Я пытаюсь сделать?

Продажи

Левая сторона - это мой текущий, что сломано, а правая сторона - это то, что я пытаюсь получить.

Рабочий процесс:

Мне нужно получить все даты (не дубликаты) текущей недели. Затем мне нужно получить все SUM(*) AS sum каждой даты (не дубликатов) текущей недели.

My JS:

var optionslinechart = {
            chart: {
                toolbar: {
                    show: false
                },
                height: 170,
                type: 'line'
            },
            dataLabels: {
                enabled: false
            },
            stroke: {
                curve: 'smooth',
                width: [ 8 ]
            },
            xaxis: {
                show: false,
                type: 'datetime',
                categories: <?= json_encode($data->current_date, true); ?>,
                labels: {
                    show: false,
                },
                axisBorder: {
                    show: false,
                },
            },
            grid: {
                show: false,
                padding: {
                    left: 15,
                    right: 15,
                    bottom: 20
                }
            },
            colors:['#ffffff'],
            series: [
                {
                    name: 'SOD',
                    data: <?= json_encode(nestedToSingle($data->current_sum), true); ?>,
                }
            ],
            tooltip: {
                x: {
                    format: 'dd/MM/yy HH:mm'
                }
            }
        };

        var chartlinechart = new ApexCharts(
            document.querySelector("#chart-widget1"),
            optionslinechart
        );
        chartlinechart.render();

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Вместо всего этого кода вы можете просто использовать что-то вроде этого ...

SELECT p.date
     , COUNT(*) total
  FROM payments p
 WHERE p.currency = :currency
   AND p.date BETWEEN CURDATE() - INTERVAL WEEKDAY(CURDATE()) AND CURDATE() - INTERVAL WEEKDAY(CURDATE()) + INTERVAL 6 DAY -- untested
 GROUP 
    BY p.date
1 голос
/ 09 мая 2020

используйте ключевое слово DISTINCT

SELECT 
DISTINCT
        `date`
    FROM `payments` 
    WHERE 
        `currency` = '{$this->settings->payment->currency}' 
    AND 
        WEEK(`date`) = WEEK(CURRENT_DATE())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...