laravel - генерирование комбинаций с учетом переменных ввода пользователя - PullRequest
0 голосов
/ 28 июня 2018
╔═══╦══════════════╦═════════════╗
║   ║id            ║name         ║
╠═══╬══════════════╬═════════════╣
║   ║ 1            ║a1           ║
║   ║ 2            ║b1           ║
║   ║ 3            ║b2           ║
║   ║ 4            ║c1           ║
║   ║ 5            ║c2           ║
╚═══╩══════════════╩═════════════╝

Я работаю с Laravel и MySQL
Рассмотрим эту таблицу. Я хочу создать все комбинации того, что указывает пользователь ввода. Например, если пользователь вводит (a,b), мой код должен сгенерировать (a1,b1) , (a1,b2)
Если пользователь вводит (b,c), мой код должен сгенерировать (b1,c1), (b1,c2), (b2,c1), (b2,c2)

Пока у меня есть следующий запрос:

DB::select(DB::raw("select t1.id as t1_id, t1.name as t1_name,
t2.id as t2_id, t2.name as t2_name,
t3.id as t3_id, t3.name as t3_name, 
from (select * from table where name like 'a%') as t1 
cross join (select * from table where name like 'b%') as t2 
cross join (select * from table where name like 'c%') as t3"));

Однако этот запрос ограничен ситуацией, когда я знаю пользовательский ввод, например, в этом случае пользователь вводит 3 переменные, т.е. (a,b,c)

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

1 Ответ

0 голосов
/ 29 июля 2018

Итак, это псевдокод, не относящийся к laravel, но надеюсь, что он даст вам представление о том, что я имею в виду.

Каждый вход поставляется как отдельный POST

$input1 = $_POST[input1]
$input2 = $_POST[input2]
$input3 = $_POST[input3]

Три переменные для построения запроса

$fullQuery = '';
$topQuery = '';
$bottomQuery = '';

IF (isset($input1) AND !empty($input1) AND isset($input2) AND !empty($input2))
{
$topQuery =  "select t1.id as t1_id, t1.name as t1_name,
t2.id as t2_id, t2.name as t2_name";


$bottomquery = " from (select * from your_table where name like '$input1%') as t1 
cross join (select * from your_table where name like '$input2%') as t2"; 
}

IF (isset($input1) AND !empty($input1) AND isset($input2) AND !empty($input2) AND isset($input3) AND !empty($input3))
{

$topQuery.=  " ,t3.name AS t3_name"


$bottomQuery.= " CROSS JOIN (SELECT * FROM your_table WHERE NAME LIKE '$input3%') AS t3"

}

$fullQuery = $topQuery . $bottomQuery . ";";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...