因此,当$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个项目。关于全部列出,我有哪些选择?
正如所指出的,您可以对数据进行后处理以获得完整的数组。
如果可以使用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
)