ВНУТРЕННЕЕ СОЕДИНЕНИЕ SQL с НЕСКОЛЬКИМИ УСЛОВИЯМИ в CodeIgniter

У меня есть следующая таблица.

таблица открытки

------------------------------------
| 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|
----------------------------------------------

чтобы соответствовать IS NULL, вам нужны соединения left, а не inner, верно?

danblack 25.01.2019 05:45

Я все еще застрял .. пробовал оба .. я все еще не получил желаемого результата .. немного помогите, пожалуйста .. спасибо

Julie 28.01.2019 10:09

Я получил несопоставленные данные по транзакциям, но не могу получить с карт..

Julie 28.01.2019 10:34
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
3
71
1

Ответы 1

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

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

Julie 28.01.2019 10:07

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