说我在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
答案 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
答案 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;
}