创建在线调查SQL数据库:选项列构建问题求助
客户调查数据库搭建方案(修正你的SQL问题)
你给出的SQL语句存在多处语法错误,同时表结构设计也有可优化空间,下面直接提供修正后的可行方案,分两种场景供你选择:
场景一:选项固定,无需频繁修改
直接用ENUM类型限定可选值,语法简单且在MySQL中支持更可靠(比CHECK约束实用性更强):
-- 创建数据库(如果不存在则创建) CREATE DATABASE IF NOT EXISTS customer_survey; USE customer_survey; -- 创建问卷表 CREATE TABLE questionnaire ( id INT AUTO_INCREMENT PRIMARY KEY, -- 新增主键,方便后续数据管理与关联 firstName VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, -- 用ENUM强制限定输入值只能是指定选项 reference ENUM('Socials', 'Google search', 'Google Mybusiness', 'Referal', 'Email') NOT NULL );
场景二:选项可能新增/修改,需要扩展性
采用规范化关联表设计,后续调整选项无需修改主表结构:
CREATE DATABASE IF NOT EXISTS customer_survey; USE customer_survey; -- 创建来源选项表,专门存储可选值 CREATE TABLE reference_options ( id INT AUTO_INCREMENT PRIMARY KEY, option_name VARCHAR(255) NOT NULL UNIQUE ); -- 插入预设选项 INSERT INTO reference_options (option_name) VALUES ('Socials'), ('Google search'), ('Google Mybusiness'), ('Referal'), ('Email'); -- 创建问卷表,通过外键关联选项表 CREATE TABLE questionnaire ( id INT AUTO_INCREMENT PRIMARY KEY, firstName VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, reference_id INT NOT NULL, -- 外键约束确保只能选择已存在的选项 FOREIGN KEY (reference_id) REFERENCES reference_options(id) );
PHP弹窗中使用的思路
- 场景一:可通过查询数据库元数据获取ENUM的可选值,SQL示例:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(column_type, "'", 2), "'", -1) AS option_value FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = 'customer_survey' AND table_name = 'questionnaire' AND column_name = 'reference';
拿到数据后用PHP循环生成单选框或下拉选择框即可。
- 场景二:直接查询选项表获取数据,PHP示例代码:
<?php // 替换为你的数据库账号密码 $conn = mysqli_connect('localhost', 'db_username', 'db_password', 'customer_survey'); // 查询所有选项 $options_result = mysqli_query($conn, "SELECT id, option_name FROM reference_options"); // 生成下拉选择框 echo '<select name="reference_id">'; while ($option = mysqli_fetch_assoc($options_result)) { echo "<option value='{$option['id']}'>{$option['option_name']}</option>"; } echo '</select>'; ?>
内容的提问来源于stack exchange,提问作者AriEm
相关产品推荐
相关产品推荐

