Mysql, где пункт не работает в codeigniter - PullRequest
3 голосов
/ 14 марта 2019

У меня MySQL Query вот так: (я использую CodeIgniter)

$report = $this->db->query("
          SELECT c.categoryName,
            note1.*,
            ((SELECT SUM(noteAmount)
              FROM notes
              WHERE DATE_FORMAT(noteDate, '%d-%m-%Y') = DATE_FORMAT(note1.noteDate, '%d-%m-%Y') AND noteType = 'cash_in')
            -
            (SELECT SUM(noteAmount)
             FROM notes
             WHERE DATE_FORMAT(noteDate, '%d-%m-%Y') = DATE_FORMAT(note1.noteDate, '%d-%m-%Y') AND noteType = 'cash_out')) as trxCount
           FROM notes AS note1
           JOIN
             (SELECT noteDate
              FROM notes
              GROUP BY noteDate
              HAVING COUNT(noteDate) > 0)
            AS note2
              ON note1.noteDate = note2.noteDate
            JOIN category c
              ON c.categoryID = note1.categoryID
            WHERE note1.noteType = 'cash_in'
            ORDER BY note1.noteDate DESC
            LIMIT $start, $per_page
          ")->result();

См. Раздел WHERE: WHERE note1.noteType = 'cash_in'

Я хочу получить только данные о наличных деньгах, но почему я получаю все данные? (включая вывод средств и др.). В моей таблице также есть данные обналичивания

таблица заметок:

noteID | noteTitle | noteDate | noteAmount | CategoryID | noteType

таблица категорий

categoryID | categoryName | ParentID

Ответы [ 3 ]

0 голосов
/ 14 марта 2019

Я полагаю, что вы пропустили where в вашем JOIN заявлении.Если бы это происходило с элементом ON или внутри самого SELECT, я думаю, это решило бы вашу проблему.

0 голосов
/ 14 марта 2019

Запрос

SELECT noteDate
          FROM notes
          GROUP BY noteDate
          HAVING COUNT(noteDate) > 0

выбирает все таблицы notes как note2 (включая записи cash_out), и фильтрация выполняется только для записей, где note1.noteType = 'cash_in'.Это даст как cash_in, так и cash_out записи, так как условие соединения проверяет только на note1.noteDate = note2.noteDate, который всегда будет иметь некоторое совпадение.

Возможно, добавьте условие where в условие on и посмотрите,это то, что вы хотите.

0 голосов
/ 14 марта 2019

Возможно опечатка с cash_in и in.

$report = $this->db->query("
          SELECT c.categoryName,
            note1.*,
            ((SELECT SUM(noteAmount)
              FROM notes
              WHERE DATE_FORMAT(noteDate, '%d-%m-%Y') = DATE_FORMAT(note1.noteDate, '%d-%m-%Y') AND noteType = 'in')
            -
            (SELECT SUM(noteAmount)
             FROM notes
             WHERE DATE_FORMAT(noteDate, '%d-%m-%Y') = DATE_FORMAT(note1.noteDate, '%d-%m-%Y') AND noteType = 'out')) as trxCount
           FROM notes AS note1
           JOIN
             (SELECT noteDate
              FROM notes
              GROUP BY noteDate
              HAVING COUNT(noteDate) > 0)
            AS note2
              ON note1.noteDate = note2.noteDate
            JOIN category c
              ON c.categoryID = note1.categoryID
            WHERE note1.noteType = 'in'
            ORDER BY note1.noteDate DESC
            LIMIT $start, $per_page
          ")->result();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...