我将id存储在我的数据库的一行中,并且这些ID由逗号分隔:
12,3,5,2,7
我试图通过破坏字符串并从另一个表中选择每个id来创建一个查询,但我试图避免因性能问题而循环查询。无论如何围绕一个循环?我目前正在使用mysqli准备好的声明。
$stmt = $DBH->prepare("SELECT ids FROM list WHERE user = ?");
$stmt->bind_param("s",$userid);
$stmt->execute();
$stmt->bind_result($ids);
$stmt->fetch();
存储在ids中的只是一个数字列表,现在我如何查询另一个表,查找与列表中每个数字匹配的行,类似于标记系统。在进行查询之前,数字或数量不是预先确定的或已知的。
EXAMPLE:
Table 1: Where the actual Information is stored
ID Information
1 /*information stored for id number 1*/
2 /*information stored for id number 2*/
3 /*information stored for id number 3*/
4 /*information stored for id number 4*/
5 /*information stored for id number 5*/
Table 2: The users name and a list of id's stored (The ID_LIST will be constantly changing and expanding, the numbers contained will not be predefined.)
USER ID_LIST
exampleuser 1,3,5
exampleuser2 1,4,12,22
第一个查询将从表2中获取id列表并将它们分开。然后我需要从表2中id列表中的id中获取表1中每个id的信息。 但我试图避免循环,希望这是特定的,如果不是,请让我知道。
答案 0 :(得分:1)
您的其余代码将类似于
// This doesn't need to be a prepared statement
if ($result = $DBH->query("SELECT * FROM ids_table WHERE id IN ({$ids})")) {
while ($row = $result->fetch_assoc()) {
// Do whatever you want
}
}
答案 1 :(得分:1)
引用: - “我将id存储在我的数据库的一行中,并且以逗号分隔ID:”
这基本上是一个糟糕的设计!
你应该将id存储在另一个表中的一个列中,其中包含一个键,表示你现在的关键字,加上id。
答案 2 :(得分:0)
SELECT * FROM tbl WHERE FIND_IN_SET(id, '12,3,5,2,7')
因此,您可以指定包含由逗号分隔的数字列表的任何字段作为FIND_IN_SET
的第二个参数