Фильтруйте данные из двух таблиц и получайте результаты из обеих таблиц.Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Фильтруйте данные из двух таблиц и получайте результаты из обеих таблиц.

Сообщение Anonymous »

Как я могу фильтровать набор данных в 2 таблицах, где вторая таблица имеет больше результатов 1:n.

В первой таблице я могу использовать orWhere, и я получаю правильный результат данные, но моя другая таблица содержит несколько результатов, и если я использую «содержание» или «сопоставление», я получаю только данные из второй таблицы.

Итак, я хочу отфильтровать обе таблицы и получить совпадающие данные.

Вот мой запрос:

Первый запрос для фильтрации первой таблицы

Код: Выделить всё

$query
->where([
'OR' => [
'Orders.id' => $freeText,
'Orders.postal' => $freeText,
'Orders.address LIKE' => '%' . $freeText . '%',
'Orders.city LIKE' => '%' . $freeText . '%',
'Users.first_name' => $freeText,
'Users.last_name' => $freeText,
'ProjectAddresses.cost_centre' => $freeText,
'CONCAT(first_name, last_name) LIKE' => '%' . str_replace(' ', '', $freeText) . '%',
'CONCAT(first_name, last_name) LIKE' => '%' . $freeText .  '%',
'Users.first_name IN ' => $splittedKeywords,
'Users.last_name IN ' => $splittedKeywords,
]
]);
Второй запрос – попробуйте отфильтровать данные из второй таблицы (но все равно нужны совпадающие данные из первой таблицы)

Код: Выделить всё

$query->contain('Items', function ($q) use ($freeText) {
return $q->where(['vessel_id' => $freeText]);
});
Проблема в том, что если я использую второй запрос, он автоматически берет только данные из второй таблицы, а моя цель — получить все отфильтрованные данные (из первой и второй таблиц).

p>

У меня есть более 20 наборов данных, таких как:

Код: Выделить всё

(int) 0 => [
'id' => (int) 1,
'uuid' => '5f34ecda-6bc6-46ed-b5cc-b2227029aed8',
'user_id' => (int) 319,
'status' => (int) 30,
'order_price' => (float) 341.04,
'address_id' => (int) 379,
'address' => 'XYZ',
'building_number' => '171',
'postal' => '111',
'city' => 'XYZ',
'country' => 'AT',
'project_address' => [
'id' => (int) 379,
'type' => 'project',
'group_id' => (int) 3,
'default' => false,
'corresponding_invoice_address' => null,
'short_name' => 'XYT',
'comment' => '',
],
'user' => [
'id' => (int) 319,
'uuid' => '675216eb-7110-44d2-82a7-f7f020e934a6',
'title' => 'Herr',
'first_name' => 'Test',
'last_name' => 'Test',
],
'item_groups' => [],
'items' => [
(int) 0 => [
'id' => (int) 26,
'uuid' => 'f4f629be-e25e-4432-8d97-6b2adcee9065',
'item_group_id' => null,
'type' => (int) 2,
'status' => (int) 30,
'vessel_id' => (int) 40001,
'features' => [],
],
(int) 1 => [
'id' => (int) 28,
'uuid' => 'f4f629be-e25e-4432-8d97-6b2adcee9065',
'item_group_id' => null,
'type' => (int) 2,
'status' => (int) 30,
'vessel_id' => (int) 40003,
'features' => [],
],
(int) 1 => [
'id' => (int) 29,
'uuid' => 'f4f629be-e25e-4432-8d97-6b2adcee9065',
'item_group_id' => null,
'type' => (int) 2,
'status' => (int) 30,
'vessel_id' => (int) 40003,
'features' => [],
],
]
],
SQL

Код: Выделить всё

SELECT *
FROM orders Orders
INNER JOIN users Users ON Users.id = (Orders.user_id)
LEFT JOIN addresses ProjectAddresses ON ProjectAddresses.id = (Orders.address_id)
WHERE (Orders.id = :c0
OR Orders.postal = :c1
OR Orders.address LIKE :c2
OR Orders.city LIKE :c3
OR Users.first_name = :c4
OR Users.last_name = :c5
OR ProjectAddresses.cost_centre = :c6
OR CONCAT(first_name, last_name) LIKE :c7
OR Users.first_name IN (:c8)
OR Users.last_name IN (:c9))
Параметр: c1 = 4001 || %40001% || %40001

@ndm Цель: если кто-нибудь отправит $freeText == 40003, я должен получить в результате этот объект, где сосуд_ид = 40003 и это работает, но если кто-то отправит $freeText == Test, мне снова понадобится тот же результат, потому что first_name == Test 8см. первый запрос), и когда во втором запросе я использую сопоставление/содержание этих результатов удаляется, потому что он «выбирает» только строки, которые соответствуют/содержат элементы...

По сути, я хочу проверить более 10 столбцов с заданным $freeText переменная, и если она совпадает, я хочу, чтобы это привело к моему набору данных (из обеих таблиц)

Подробнее здесь: https://stackoverflow.com/questions/451 ... oth-tables
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»