php根据第2表排序数据

时间:2016-04-14 10:47:21

标签: php mysql for-loop

我有两个表:表1和表2

enter image description here

我需要对表视图中显示的数据进行排序。

我已经采取了:

foreach($Table1 as $row1 )
{
    foreach($Table2 as $row2 )
    {
          if($row1->id == $row2->selected_id)
          {
                  show??
          }
    }

}

请不要担心查询:真正的问题是:

只有一个问题:表1是从20个不同的函数生成的,并收集到表1.用户通过选择选择要查看的内容。所以,如果总共有7行而用户选择3,那么数据将被排序,显示在第一行选择3行,在3行之后休息。

这是正确的方法吗?还是有更简单的方法 我正在使用MySQL

请帮助任何人?

6 个答案:

答案 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()函数中,第二个表数据以字符串逗号分隔。