У меня есть следующая таблица.
таблица открытки
------------------------------------
| card_no | approval_code |
------------------------------------
| 999999xxxxxx1234 | 111111 |
----------------------------------
| 888888xxxxxx5678 | 222222 |
------------------------------------
| 777777xxxxxx9012 | 333333 |
-----------------------------------
| 666666xxxxxx3456 | 444444 |
-----------------------------------
таблица сделки
---------------------------------------------
| trans_id | pan | approval code | amount |
---------------------------------------------
| A1 | 9012 | 333333 | 9.9|
----------------------------------------------
| A2 | 9012 | 333333 | 10.0|
----------------------------------------------
| B1 | 1233 | 111111 | 11.0|
----------------------------------------------
| B2 | 1234 | 111111 | 12.0|
----------------------------------------------
| C1 | 5678 | 222222 | 13.0|
----------------------------------------------
| C2 | 5678 | 444444 | 13.0|
----------------------------------------------
Мой вывод - отображать 3 типа вывода. 1-й вывод — отображение совпадающих данных, 2-й вывод — отображение несовпадающих данных из таблицы карточек, а 3-й вывод — отображение несовпадающих данных из таблицы транзакций. следующие мои коды. таблица транзакций хранит только панораму (последние 4 цифры из card_no), поэтому мне нужно использовать substr, чтобы получить последние 4 цифры.
для совпадающих данных:
$query = $this->db->select (array(
'c.card_no', 'c.approval_code',
't.trans_id','t.pan','t.approval_code','amount'
),false)
-> join('transactions t','t.approval_code = c.approval_code','inner')
-> join('transactions t','t.pan = substr(c.card_no,12)','inner')
-> get('cards c');
для непарных данных из таблицы карт;
$query = $this->db->select (array(
'c.card_no', 'c.approval_code',
't.trans_id','t.pan','t.approval_code','amount'
),false)
-> join('transactions t','t.approval_code != c.approval_code','inner')
-> join('transactions t','t.pan != substr(c.card_no,12)','inner')
-> where ('t.approval_code' IS NULL,NULL,FALSE)
-> where ('t.pan' IS NULL,NULL,FALSE)
-> get('cards c');
для несовпадающих данных из таблицы транзакций;
$query = $this->db->select (array(
'c.card_no', 'c.approval_code',
't.trans_id','t.pan','t.approval_code','amount'
),false)
-> join('cards c','t.approval_code = c.approval_code','inner')
-> join('cards c','t.pan != substr(c.card_no,12)','inner')
-> where ('c.approval_code' IS NULL,NULL,FALSE)
-> where ('c.card_no' IS NULL,NULL,FALSE)
-> get('cards c');
Оба, кажется, не работают .. хммм мои ожидаемые результаты:
выход сопоставленные данные
--------------------------------------------------------
| card_no | approval_code | trans_id | amount |
--------------------------------------------------------
| 999999xxxxxx1234 | 111111 | B2 | 12.0 |
-------------------------------------------------------
| 888888xxxxxx5678 | 222222 | C1 | 13.0 |
--------------------------------------------------------
| 777777xxxxxx9012 | 333333 | A1 | 9.9 |
-------------------------------------------------------
| 777777xxxxxx9012 | 333333 | A2 | 10.0 |
-------------------------------------------------------
выход непревзойденные данные из карточек таблицы
------------------------------------
| card_no | approval_code |
------------------------------------
| 666666xxxxxx3456 | 444444 |
-----------------------------------
выход несопоставленные данные из табличных транзакций
---------------------------------------------
| trans_id | pan | approval code | amount |
---------------------------------------------
| B1 | 1233 | 111111 | 11.0|
----------------------------------------------
| C2 | 5678 | 444444 | 13.0|
----------------------------------------------
Я все еще застрял .. пробовал оба .. я все еще не получил желаемого результата .. немного помогите, пожалуйста .. спасибо
Я получил несопоставленные данные по транзакциям, но не могу получить с карт..






Чтобы получить несопоставленные данные из таблицы cards, замените join на right join. А для несовпадающих данных из таблицы transactions заменить join на left join в соответствующих запросах.
Я пытался, но до сих пор не правильно получил совпадающие и несопоставленные данные.
чтобы соответствовать
IS NULL, вам нужны соединенияleft, а неinner, верно?