如何在MySQL或PHP中选择唯一的值,仅用于连续值

时间:2018-09-09 03:13:54

标签: php mysql

说我在MySQL的一栏中有数据:

1   a
2   a
3   a
4   b
5   b
6   c
7   d
8   b
9   b
10  b
11  a

第一列是id。 如果我选择与第二列不同的话,我会

a
b
c
d

但是,如果它们不是连续出现或不是一起出现,我仍然需要这些值,即我需要:

a
b
c
d
b
a

我需要第二个“ b”和第二个“ a”,因为第8,9,10行不是“一起”或与第4,5行连续出现。

我该如何使用MySQL或PHP(使用MySQL,甚至仅使用PHP(从csv文件读取))来做到这一点?

注意:我正在使用MySQL 5.6和PHP 7

2 个答案:

答案 0 :(得分:2)

仅在MySQL中这是相当简单的,您只需要跟踪'val'的最后一个值是什么,并查看当前值是否不同。请注意,为确保获得预期结果,必须对表1中的值进行编号,然后再进行处理。否则,根据插入顺序,您可能会得到意想不到的结果...

SELECT id, @last := val AS value
FROM (SELECT * FROM table1 ORDER BY id) t
JOIN (SELECT @last := '') l
WHERE val != @last

输出

id  value
1   a
4   b
6   c
7   d
8   b
11  a

SQLFiddle Demo

答案 1 :(得分:0)

仅在PHP中:

$data = [
    1 => 'a',
    2 => 'a',
    3 => 'a',
    4 => 'b',
    5 => 'b',
    6 => 'c',
    7 => 'd',
    8 => 'b',
    9 => 'b',
    10 => 'b',
    11 => 'a',
];

$result = [];
foreach ($data as $value) {
    if (count($result) === 0)
        $result[] = $value;
    elseif (end($result) !== $value)
        $result[] = $value;
}