2011-05-25 100 views
1

我有2个表格:用户和项目。每个项目都有一个用户#。所以,如果我想找到只有我能一个特定用户相关联的项目:MySQL字段中的数组?

SELECT * FROM项目其中USER_ID =“$ user_ID的”;

但是,如果有成千上万的项目,通过表搜索将永远,对吧?

有没有更好的方式去做这件事?也许一种方法可以将与用户关联的所有项目编号存储到用户表中的字段中?

感谢, 杰森

+0

每个项目是否只有一个用户? – PeeHaa 2011-05-25 20:09:05

+0

是的。每个项目都有。 – lewicki 2011-05-25 20:14:16

回答

1

不,它不会永远走。即使有数百万条记录,这也是应该如何完成的。

我注意到你引用了user_id的值...不是一个数字字段吗?引号是不需要的。

很明显,user_id应该是一个索引字段。

+0

它是一个PHP字符串的一部分: $ query =“SELECT * FROM items WHERE user_id ='$ user_id'”; 这将工作没有报价? – lewicki 2011-05-25 20:13:04

+0

是啊...'$ query =“select * from user where user_id =”user_id“;'并且确保你正在清理那个变量,所以它不能被sql注入。 – Fosco 2011-05-25 20:14:58

3

保留您当前的结构,但在user_id上添加索引。这意味着在查看此列时,不需要搜索“数千个项目”。

在单个列中存储多个值(违反First Normal Form)将会退步,因为它将大大降低item_id查询的相对查询效率。

+0

这就是我的,谢谢。 – lewicki 2011-05-25 20:13:28

1

数据库(不仅仅是MySQL)在搜索时相当快。因此即使在百万条记录中也只需要几毫秒即可找到这样的行。数据库对此使用“索引” - 因此,如果“user_id”列不是主键,则在user_id上创建索引。否则它可能会很慢。