0

好的,伙计们,我需要一些帮助。我正在尝试设计一个页面,用户可以在其中提出问题并上传最多 4 张图片。我有 2 个数据库表、问题和 image_table。我已经正确上传了所有内容,所以这不是我的问题。我遇到的麻烦是从 image_table 数据库中选择仅对应于该问题的图像。我不知道该怎么做。任何帮助将不胜感激。

4

2 回答 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

- - - 编辑 - -

你描述的过程看起来像这样:

  1. 用户提交上传表单
  2. 你用 php 捕获表单数据
  3. 你上传图片和东西
  4. 您将问题和图像插入数据库 <-- $xy = mysql_insert_id() to var
  5. 您使用上述查询选择图像
  6. 回显结果

- 编辑 -

好的,您的图片上传表单与问题分开。不需要 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 回答