Php “最佳存储方式”;其他";将数据导入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.

我有一个带有单选按钮的表单,它将值(即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.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选项中有一个输入