好的伙计们,我需要一些帮助。我正在尝试设计一个用户可以提出问题并上传最多4张图片的页面。我有2个数据库表,问题和image_table。我已正确上传所有内容,因此这不是我的问题。我无法做的是从image_table数据库中选择仅对应于该问题的图像。我无法弄清楚如何做到这一点。任何帮助将不胜感激。
答案 0 :(得分:1)
您需要在question_id
中包含image_table
列,其中包含图片所属问题的ID。具有引用另一个表的列的表的概念称为外键。
您可以使用以下SQL命令添加现有image_table
的外键:
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;
答案 1 :(得分: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将所有图像路径放入结果集中的数组中。因此查询只会产生一行。
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
-----编辑----
你所描述的过程就像这样找我:- 编辑 -
确定您的图片上传表单与问题分开。 不需要sql选择... 你知道它上传的路径,你知道你要上传的图像的名称
//uploading the image
if(!isset($_SESSION['questionImages'])) {
$_SESSION['questionImages'] = array();
}
$_SESSION['questionImages'][] = $dir.'/'.$_FILE['name'];
稍后当您想要回显图像时,只需使用$ _SESSION ['questionImages']数组
如果用户提交了您必须重置会话变量questionImages的问题