Php “最佳存储方式”;其他";将数据导入MySQL数据库
我有一个带有单选按钮的表单,它将值(即ID)存储在我的MySQL数据库中,以及来自用户的必要信息Php “最佳存储方式”;其他";将数据导入MySQL数据库,php,mysql,database-schema,Php,Mysql,Database Schema,我有一个带有单选按钮的表单,它将值(即ID)存储在我的MySQL数据库中,以及来自用户的必要信息 INSERT INTO table (user_id, name, address, prefer_id) VALUES ('', ?, ?, ?); 因此,当我试图获取数据时,我使用左联接,从表2中获取必要的描述: SELECT a.name, a.address, b.prefer_desc FROM table a LEFT JOIN table2 b ON a.prefer_id = b.
INSERT INTO table (user_id, name, address, prefer_id) VALUES ('', ?, ?, ?);
因此,当我试图获取数据时,我使用左联接
,从表2
中获取必要的描述:
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
时,将出现一个文本框,以便用户可以自由键入自己喜欢的数据。选中此项查看示例
我想到的第一个逻辑是创建一个单独的表来存储用户输入的数据
INSERT INTO table (user_id, name, address, prefer_id) VALUES ('', ?, ?, ?);
其他结核病:
other_id | user_id | typed_in |
----------+---------+----------+
1 | 1 | cake |
2 | 3 | pizza |
因此,当我获取数据时,如果首选id
是4
(或其他),我将使用php
的if()
条件,如果它是4
(或其他),我将使用另一个SELECT
查询来获取其他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\u tb
中的记录对于每个user\u 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 = ?
根据具体情况,我可以练习两种方法:
表2
。因此,在获取数据时,您仍然可以使用LEFT JOIN
来获取用户的首选选项,而无需任何其他条件。但此方法将允许用户查看其他用户添加的选项表2
,请在表1
中添加另一列,该列存储用户的其他
答案(例如其他选项
列)。此方法允许用户在不向表2
添加选项的情况下,仍然自由地声明其选项表1
:
+---------+------+---------+-----------+--------------+
| user_id | name | address | prefer_id | other_option |
+---------+------+---------+-----------+--------------+
我要做的是,如果用户愿意回答other\u选项
,我将0置于preference\u id
。因此,您的程序希望,如果首选\u id
为0,则在其他\u选项中有一个输入