列出来自数组的sql查询中的重复项

问题描述 投票:0回答:1

因此,当$arr_wordids有10个重复项时,我有此查询返回8行而不是10行。

SELECT abc.word, abc.HUN, def.CONTEXT as context, def.WORDID as wordid FROM def JOIN abc ON abc.ID = def.WORDID WHERE WORDID IN ("12212", "8612", "12212", "52355") AND def.USERID=10001235 AND REMOVED=0

在PHP中WORDID IN ("12212", "48612", "12212", "52355")实际上是WHERE WORDID IN (" . implode(',', array_map('intval', $arr_wordids)) . ")

因为IN运算符删除了重复项,所以此查询的结果现在是3行而不是4行。

作为演示,我在示例中仅添加了4个项目。关于全部列出,我有哪些选择?

php mysql pdo
1个回答
0
投票

正如所指出的,您可以对数据进行后处理以获得完整的数组。

如果可以使用wordid列作为索引从PDO返回数据,则将节省一个步骤(有关如何执行此操作的详细信息,请参见https://stackoverflow.com/a/36621058/1213708)。如果没有,则可以使用$data = array_column($data, null, 'wordid');实现相同的操作。

然后带有要返回的单词ID数组和数据库中的索引数据,您可以通过将两者匹配来构建完整的数据数组。一个例子是...

$arr_wordids = [ 1,2,3,1];
// Results of SQL query
$data = [1 => 'row 1', 2 => 'row 2', 3 => 'row 3'];
$arr_data = [];
foreach ( $arr_wordids as $wordid ) {
    if (isset($data[$wordid])) {
        $arr_data[] = $data[$wordid];
    }
}

print_r($arr_data);

与示例数据一起给出...

Array
(
    [0] => row 1
    [1] => row 2
    [2] => row 3
    [3] => row 1
)
© www.soinside.com 2019 - 2024. All rights reserved.