我遇到麻烦,需要你的帮助。
数组转换为字符串只会在implode中添加最后一行值而不是全部。
我在mysql数据库中有以下值
表名:Item1
ID Value
01 James,Jenny,Loreal
02 Sunny,John,Razil
现在我想调用另一个表中的值,其中名称不等于上面的值。我用下面的查询。
$stmt= $db->prepare("Select * from Item1");
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_BOTH))
{
$mark=explode(',', $row['Value']);
}
$string_version = "'" . implode("','", $mark) . "'";
//in $string_version it only ads the 2nd row values not all rows values i need to add the all values which is in Values colunm
$stmt = $db->prepare("Select * from item2 where names not in (".$string_version.") ");
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_BOTH))
{
echo $row['name'];
}
结果:
James
Jenny
Loreal
Peter
结果预期:
Peter
答案 0 :(得分:0)
$mark
变量不是数组。这就是为什么只有“Razil”在这个变量中分配的原因。
我认为你需要这样做:
while($row = $stmt->fetch(PDO::FETCH_BOTH))
{
$mark[]=explode(',', $row['Value']);
}
答案 1 :(得分:0)
我会遵循不同的路径(使用数组来保存所有名称):
$stmt= $db->prepare("Select * from Item1");
$stmt->execute();
$names = [];
while($row = $stmt->fetch(PDO::FETCH_BOTH))
{
$mark=explode(',', $row['Value']);
foreach ($mark as $name)
$names[] = "'".$name."'";
}
$stmt = $db->prepare("Select * from item2 where names not in (".implode(', ', $names).") ");
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_BOTH))
{
echo $row['name'];
}
请注意,如果名称包含撇号字符('
),则此方法无效。使用数据库层支持的转义。
答案 2 :(得分:0)
每次循环到表item1时,都会覆盖$ mark变量。我建议用group_concat编写第一个查询。
从item1
中选择group_concat(Mycol separator',')作为名称