2010-03-21 134 views
0

我有一个包含成员名称和一个字段与多个ID号码的表。我想创建一个查询,返回ID字段中的任何值与数组中的任何值重叠的结果。虽然循环阵列

例如:名字:史密斯 姓:约翰 ID: 101,103

我有阵列#1具有值101,102,103

我想要的查询以输出具有在其id域中列出的值101或102或103的所有成员,并具有列出的多个ID。

Array ( [0] => 101 
     [1] => 102 
     [2] => 103) 

$sql="SELECT firstname, lastname, id 
     FROM members WHERE id LIKE '%".$array_num_1."%'"; 
$result=mysql_query($sql); 

while ($rows=mysql_fetch_array($result)) { 
     echo $rows['lastname'].', '.$rows['firstname'].'-'.$rows['id']; 
     } 

我试图简化它。这些ID实际上存储在另一个表中,并且我从该表中生成了该数组。

$array_num_1 = array(); 
$sql_id="SELECT id FROM id_table WHERE id < 200"; 
$result_id=mysql_query($sql_id); 
while($rows_id=mysql_fetch_array($result_id)){; 
     $array_num_1[] = $rows_id['id']; 
} 
+3

存储值的列表,然后尝试写反对一个查询,然后使用答案是造型的关系的* *可怕的方式。我的建议是将您的数据库用作数据库。为关系创建一个子表,然后查询很简单。 – cletus 2010-03-21 16:01:54

+0

这些ID实际上存储在一个单独的表中。见上面的编辑。 – Michael 2010-03-21 16:16:14

+0

所以,你必须摆脱成员表中的这些id – 2010-03-21 16:21:07

回答

2

正常化您的数据库。 将这些ID设置为单独的表格。

编辑:下面

+0

这些ID实际上存储在一个单独的表中。见上面的编辑。 – Michael 2010-03-21 16:14:20

1

如果你必须这样做:作为@cletus在他的评论中说

$sql = "SELECT firstname, lastname, id FROM members WHER id IN (" . implode(', ', $array) . ")" 

,不过,该数据库是为这种事做。在一个数组中硬编码似乎是做事情的次优方式。

+0

我已经尝试使用IN函数,与此问题是ID字段中列出了多个号码。所以WHERE ID等于“101,103”不适用于IN(101,102,103) – Michael 2010-03-21 16:07:16

+0

然后修复您的数据库结构。 – ceejayoz 2010-03-21 16:11:58

+0

这些ID实际上存储在一个单独的表中。见上面的编辑。 – Michael 2010-03-21 16:15:16

1

你可能寻找IN

SELECT firstname, lastname, id FROM members WHERE id IN (1, 2, 3); 

当然,你可以动态地创建(1, 2, 3),例如使用implode。


哎呀,我只是意识到我得到你的数据库架构错误。正如其他人所建议的那样,您应该使其正常化。

+0

这是什么意思?我对此是半新的。 – Michael 2010-03-21 16:08:08

+0

@middus(OT)现在我最近在哪里看到你的照片?;) – Gordon 2010-03-21 17:45:26

+0

@Gordon看看这里的人在做什么总是很有趣。 :) – middus 2010-03-21 18:23:15

0
SELECT firstname, lastname, m.id 
FROM members m, id_table i ON m.id=id_name 
WHERE i.id < 200