[英]Best way to store "Other" data into MySQL database
我有一个带有单选按钮的表单,它在我的 MySQL 数据库中存储值(即 ID)以及来自用户的必要信息。
INSERT INTO table (user_id, name, address, prefer_id) VALUES ('', ?, ?, ?);
因此,当我尝试获取数据时,我使用LEFT JOIN
从table2
获取必要的描述:
SELECT a.name, a.address, b.prefer_desc FROM table a
LEFT JOIN table2 b ON a.prefer_id = b.prefer_id
WHERE a.user_id = ?
但是我创建了另一个选项,以防用户喜欢的选项不在列表中。 当用户在单选按钮列表中选择Other
时,将出现一个文本框,以便他们可以自由输入他们喜欢的数据。 检查此小提琴以查看示例。
我想到的第一个逻辑是创建一个单独的表来存储用户输入的数据。
其他_tb:
other_id | user_id | typed_in |
----------+---------+----------+
1 | 1 | cake |
2 | 3 | pizza |
因此,当我获取数据时,如果prefer_id
为4
(或其他),我将使用php
的if()
条件,如果是,我将使用另一个SELECT
查询来获取other_tb
表中的其他数据。
SELECT typed_in FROM other_tb WHERE user_id = ?
有没有办法在一个查询中完成所有这些?
或者
这是最好的选择,还是在这种情况下有正确或更好的方法?
尝试这个
SELECT
a.name,
a.address,
IF(a.prefer_id=4,(SELECT typed_in FROM other_tb WHERE user_id = a.user_id),b.prefer_desc) as prefer_desc
FROM table a
LEFT JOIN table2 b
ON a.prefer_id = b.prefer_id
WHERE a.user_id = ?
如果您按照您的描述使用第二个表,并且您希望保持相同的输出格式并假设other_tb
中的记录对于每个user_id
都是唯一的,您可以使用以下内容:
SELECT a.name, a.address,
CASE
WHERE a.prefer_id = 4 THEN c.typed_in
ELSE b.prefer_desc
END CASE AS prefer_desc
FROM table a
LEFT JOIN table2 b ON a.prefer_id = b.prefer_id
LEFT JOIN other_tb c ON a.user_id = c.user_id
WHERE a.user_id = ?
我觉得这也可以写成:
SELECT a.name, a.address,
CASE a.prefer_id
WHERE 4 THEN c.typed_in
ELSE b.prefer_desc
END CASE AS prefer_desc
FROM table a
LEFT JOIN table2 b ON a.prefer_id = b.prefer_id
LEFT JOIN other_tb c ON a.user_id = c.user_id
WHERE a.user_id = ?
根据情况,我可以练习两种方法:
table2
。 所以在获取数据时,你仍然可以使用LEFT JOIN
来获取用户的首选选项,而无需任何其他条件。 但是这种方法将允许用户查看其他用户添加的选项。table2
添加选项,则在table1
有另一列,它存储用户的other
答案(比如other_option
列)。 此方法允许用户仍然自由地声明他们的选项,而无需向table2
添加选项。 这是表table1
:
+---------+------+---------+-----------+--------------+
| user_id | name | address | prefer_id | other_option |
+---------+------+---------+-----------+--------------+
我做的是我把0到prefer_id
如果用户更喜欢回答other_option
。 所以,你的程序要求,如果prefer_id
是0,你必须在输入other_option
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.