我有一张这样的桌子
id | name
------------------
1 | SAM1
2 | SAM2
1 | SAM1
3 | SAM3
7 | SAM7
6 | SAM6
我需要使用此查询显示结果
SELECT name,id FROM tblnameWHERE id IN (1,2,7,6,1)
并获得以下结果
id | name
------------------
1 | SAM1
2 | SAM2
7 | SAM7
6 | SAM6
我的问题是这个跳过的最后一个id,即1。我需要这样的东西
id | name
------------------
1 | SAM1
2 | SAM2
7 | SAM7
6 | SAM6
1 | SAM1
没有使用循环查询(如下所示)任何其他方法来执行此操作?
$ids=array(1,2,7,6,1);
$i=0;
foreach($ids as $id){
$sql=mysql_query("SELECT * FROM tblname WHERE id=$id");
// Store value to array
}
请帮忙
答案 0 :(得分:2)
查询
SELECT name,id FROM tblname WHERE id IN (1,2,7,6);
应该显示重复的行;例如如果表中有真正的两个具有相同id的不同行,那么查询将显示它们(因为没有DISTINCT关键字)。
相反,如果要从包含单行的表开始创建重复行,则必须使用重复为1的表(在您的情况下)加入表;另一种方式可能是使用这样的联盟:
SELECT name, id FROM tblname WHERE id IN (1,2,7,6)
UNION ALL
SELECT name, id FROM tblname WHERE id = 1;
修改强>
由于您的ID是主键,因此它将是唯一的,因此您遇到了“问题”。如果要在插入时允许重复行,请删除主键。如果您需要,请考虑上面建议的可能解决方案。
答案 1 :(得分:1)
你必须使id唯一,你对不同的行有相同的id,因此你不能同时获得这两行。
答案 2 :(得分:1)
两个字段都具有相同的ID和相同的值。你说id
是你桌上的主要钥匙。
主键之间不能重复主键。 这是拥有主键的重点
您不能将id字段声明为主键。
将主键添加到该字段,运行此查询
ALTER TABLE `tablename` ADD PRIMARY KEY(id) AUTO_INCREMENT
现在从现在开始,您将拥有所有记录的唯一ID,并且您在选择行时没有任何问题。
答案 3 :(得分:1)
尝试联合所有
(SELECT name,id FROM tblname WHERE id IN (1,2,7,6)) UNION ALL (SELECT name,id FROM tblname WHERE id IN (1))
答案 4 :(得分:1)
正如你所说id是主键 您不能为该字段插入重复的条目 因此,id为1的第二个插入可能失败
SELECT name,id FROM tblname
它不会显示id为1的第二个条目
因为主键应该是唯一的。
所以你得到的就是你在数据库中拥有的东西。
答案 5 :(得分:1)
您可以尝试使用表
中的更改SELECT name,id FROM tblname WHERE id IN (1,2,7,6,1) GROUP BY id