开发者

How to display multiple values in a MySQL database?

I was wondering how can you display multiple values in a database for example, lets say you have a user who will fill out a form that asks them to type in what types of foods the开发者_运维百科y like for example cookies, candy, apples, bread and so on.

How can I store it in the MySQL database under the same field called food?

How will the field food structure look like?


You may want to read the excellent Wikipedia article on database normalization.

You don't want to store multiple values in a single field. You want to do something like this:

form_responses
    id
    [whatever other fields your form has]

foods_liked
    form_response_id
    food_name

Where form_responses is the table containing things that are singular (like a person's name or address, or something where there aren't multiple values). foods_liked.form_response_id is a reference to the form_responses table, so the foods liked by the person who has response number six will have a value of six for the form_response_id field in foods_liked. You'll have one row in that table for each food liked by the person.

Edit: Others have suggested a three-table structure, which is certainly better if you are limiting your users to selecting foods from a predefined list. The three-table structure may be better in the case that you are allowing them the ability to enter their own foods, though if you go that route you'll want to be careful to normalize your input (trim whitespace, fix capitalization, etc.) so you don't end up with duplicate entries in that table.


normally, we do NOT work out like this. try to use a relation table.

Table 1: tbl_food

ID    primary key, auto increment
FNAME varchar

Table 2: tbl_user

ID   primary key, auto increment
USER varchar

Table 3: tbl_userfood

RID      auto increment
USERID   int
FOODID   int

Use similar format to store your data, instead a chunk of data fitted into a field.

Querying in these tables are easier than parsing the chunk of data too.


Use normalization.

More specifically, create a table called users. Create another called foods. Then link the two tables together with a many-to-many table called users_to_foods referencing each others foreign keys.


One way to do it would be to serialize the food data in your programming language, and then store it in the food field. This would then allow you to query the database, get the serialized food data, and convert it back into a native data structure (probably an array in this case) in your programming language.

The problem with this approach is that you will be storing a lot of the same data over and over, e.g. if a lot of people like cookies, the string "cookies" will be stored over and over. Another problem is searching for everyone who likes one particular food. To do that, you would have to select the food data for each record, unserialize it, and see if the selected food is contained within. This is a very inefficient.

Instead you'll want to create 3 tables: a users table, a foods table, and a join table. The users and foods tables will contain one record for each user and food respectively. The join table will have two fields: user_id and food_id. For every food a user chooses as a favorite, it adds a record to the join table of the user's ID and the food ID.

As an example, to pull all the users who like a particular food with id FOOD_ID, your query would be:

SELECT users.id, users.name
FROM users, join_table
WHERE join_table.food_id = FOOD_ID
AND join_table.user_id = users.id;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜