我有两个表:表1和表2
我需要对表视图中显示的数据进行排序。
我已经采取了:
foreach($Table1 as $row1 )
{
foreach($Table2 as $row2 )
{
if($row1->id == $row2->selected_id)
{
show??
}
}
}
请不要担心查询:真正的问题是:
只有一个问题:表1是从20个不同的函数生成的,并收集到表1.用户通过选择选择要查看的内容。所以,如果总共有7行而用户选择3,那么数据将被排序,显示在第一行选择3行,在3行之后休息。
这是正确的方法吗?还是有更简单的方法 我正在使用MySQL
请帮助任何人?
答案 0 :(得分:1)
根据您的additional question,您似乎不希望使用MySQL,并且您的用户选择实际上是这样的数组:
$filter = [ 3, 4, 7, 8 ];
使用$Table1
过滤原始array_reduce
数组。使用此方法,您将获得一个数组($filtered
),其中元素0中包含用户选择,元素1中包含其他值:
$filtered = array_reduce
(
$Table1,
function( $carry, $item ) use( $filter )
{
$index = !in_array( $item['id'], $filter );
$carry[$index][] = $item;
return $carry;
},
[ [], [] ]
);
然后,将$filtered
数据与call_user_func_array
合并:
$result = call_user_func_array( 'array_merge', $filtered );
结果:
Array
(
[0] => Array
(
[id] => 3
[name] => C
)
[1] => Array
(
[id] => 4
[name] => D
)
[2] => Array
(
[id] => 7
[name] => G
)
[3] => Array
(
[id] => 8
[name] => H
)
[4] => Array
(
[id] => 1
[name] => A
)
[5] => Array
(
[id] => 2
[name] => B
)
[6] => Array
(
[id] => 5
[name] => E
)
[7] => Array
(
[id] => 6
[name] => F
)
)
答案 1 :(得分:0)
您可以在单个查询中实现此目的,之后无需在两个表上循环
Select t1.id, t1.name
From Table1 t1
Left Join Table2 t2 On t1.id = t2.selected_id
Order By t2.id, t1.id
答案 2 :(得分:0)
您可以使用有效的SQL查询来立即获取最终表:
<强>查询1:强>
SELECT t2.id, t1.name
FROM t2
INNER JOIN t1
ON t2.id=t1.id;
这将输出前4行,然后输出:
<强> QUERY2:强>
SELECT id, name
FROM t1
WHERE id NOT IN (SELECT id FROM t2);
输出最后4行,然后输入UNION:
最终查询:
Query1 UNION Query2;
<强>显式:强>
(SELECT t2.id, t2.name
FROM t2
INNER JOIN t1
ON t2.id=t1.id)
UNION
(SELECT id, name
FROM t1
WHERE id NOT IN (SELECT id FROM t2));
更紧凑:
(SELECT t2.*
FROM t2
INNER JOIN t1
ON t2.id=t1.id)
UNION
(SELECT *
FROM t1
WHERE id NOT IN (SELECT id FROM t2));
答案 3 :(得分:0)
您可以进行以下查询。
std::deque<int> myDeque = myStack; // Does not compile
答案 4 :(得分:0)
您可以使用Union首先显示所选行,然后使用未选择的行,再结合(where in)和(where in not)子句,接下来是查询:
(select t1.id, t1.name from table1 t1 where t1.id
in (select t2.selected_id from table2 t2)) union
(select t1.id , t1.name from table1 t1 where t1.id
not in (select t2.selected_id from table2 t2));
答案 5 :(得分:0)
您可以在查询中使用:按字段排序()。在field()函数中,第二个表数据以字符串逗号分隔。