好的,伙计们,我需要一些帮助。我正在尝试设计一个页面,用户可以在其中提出问题并上传最多 4 张图片。我有 2 个数据库表、问题和 image_table。我已经正确上传了所有内容,所以这不是我的问题。我遇到的麻烦是从 image_table 数据库中选择仅对应于该问题的图像。我不知道该怎么做。任何帮助将不胜感激。
问问题
197 次
2 回答
1
您需要question_id
在您的列中image_table
包含图像所属问题的 ID。具有引用另一个表的列的表的概念称为外键。
您可以image_table
使用以下 SQL 命令添加现有的外键:
ALTER TABLE image_table
ADD question_id integer DEFAULT NULL;
添加外键约束:
ALTER TABLE image_table
ADD CONSTRAINT image_question_fk
FOREIGN KEY (question_id)
REFERENCES questions(question_id);
然后适当地填写(使用 phpMyAdmin 之类的工具,假设您使用 MySQL)所有question_id
字段image_table
。
然后您可以按问题查询图像。假设您想获取问题 #5 的图像。那么查询将是:
SELECT image_table.*
FROM image_table, questions
WHERE image_table.question_id = question.question_id
AND questions.question_id = 5;
于 2012-11-18T22:16:36.390 回答
0
您的表格图像中有一个 FOREIGN KEY,它引用了您的表格问题的 PRIMARY KEY。它被称为关系...
拥有它真的很好,您可以添加一个删除级联,每次删除一个问题时,相应的图像都会被删除。
外键示例
CREATE TABLE questions (
questionid INT AUTO_INCREMENT,
question TEXT,
PRIMARY(questionid)
)
CREATE TABLE images (
imagesid INT AUTO_INCREMENT,
questionid INT NOT NULL,
path VARCHAR(255),
PRIMARY KEY (imageid),
FOREIGN KEY (questionid) REFERENCES questions(questionid)
)
可以使用 GROUP_CONCAT 将所有图像路径放入结果集中的数组中。所以查询将只产生 1 行。
SELECT *, GROUP_CONAT(i.path) AS images
FROM questions q
INNER JOIN images i ON i.questionid = q.questionid
WHERE q.questionid = $xy
GROUP BY q.questionid
- - - 编辑 - -
你描述的过程看起来像这样:
- 用户提交上传表单
- 你用 php 捕获表单数据
- 你上传图片和东西
- 您将问题和图像插入数据库 <-- $xy = mysql_insert_id() to var
- 您使用上述查询选择图像
- 回显结果
- 编辑 -
好的,您的图片上传表单与问题分开。不需要 sql 选择...您知道将要上传的路径,并且您知道要上传的图像的名称
//uploading the image
if(!isset($_SESSION['questionImages'])) {
$_SESSION['questionImages'] = array();
}
$_SESSION['questionImages'][] = $dir.'/'.$_FILE['name'];
稍后当您想要回显图像时,只需使用 $_SESSION['questionImages'] 数组
如果用户提交了您必须重置会话变量 questionImages 的问题
于 2012-11-18T22:24:30.983 回答