有人可以帮我解决这个问题吗?

时间:2011-03-25 05:48:03

标签: php mysql mysqli prepared-statement

我将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的信息。 但我试图避免循环,希望这是特定的,如果不是,请让我知道。

3 个答案:

答案 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的第二个参数