从数据库中选择图片

时间:2012-11-18 22:05:34

标签: php html database image select

好的伙计们,我需要一些帮助。我正在尝试设计一个用户可以提出问题并上传最多4张图片的页面。我有2个数据库表,问题和image_table。我已正确上传所有内容,因此这不是我的问题。我无法做的是从image_table数据库中选择仅对应于该问题的图像。我无法弄清楚如何做到这一点。任何帮助将不胜感激。

2 个答案:

答案 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

-----编辑----

你所描述的过程就像这样找我:

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

    确定您的图片上传表单与问题分开。 不需要sql选择... 你知道它上传的路径,你知道你要上传的图像的名称

    //uploading the image
    if(!isset($_SESSION['questionImages'])) {
    $_SESSION['questionImages'] = array();
    }
    
    $_SESSION['questionImages'][] = $dir.'/'.$_FILE['name'];
    

    稍后当您想要回显图像时,只需使用$ _SESSION ['questionImages']数组

    如果用户提交了您必须重置会话变量questionImages的问题