phpmyadmin中的外键在newsfeed中给出错误

时间:2014-06-08 17:31:35

标签: php mysql sql database

我正在处理新闻,我希望我这是正确的,但我希望上传的图片链接到上传它的用户。我有2张桌子。

users此处存储了帐户。

picas此处存储上传的图片。

我在users中有一个名为user_id的主键,我在picas表中有一个名为id的主键。 我在picas中创建了一个名为user_id的新colomn,当上传图像时,我告诉PHP从登录的用户那里获取id,然后将其插入到user_id colomn中表picas所以我可以看到哪个用户上传了图片。

所以我的users表看起来像这样:

+-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+----------------+ | user_id | int(1) | NO | PRI | NONE | AUTO_INCREMENT | +-------------+-------------+------+-----+---------+----------------+

我的picas表看起来像这样:

+-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+----------------+ | id | int(1) | NO | PRI | NONE | AUTO_INCREMENT | +-------------+-------------+------+-----+---------+----------------+ | user_id | int(1) | NO | | NONE | | +-------------+-------------+------+-----+---------+----------------+

目前我对新闻源有疑问。它会显示不同用户的头像和名称,但如果我在登录帐户时发布了某些内容,则会为每个用户发布内容。因此,如果我有5个不同的用户,我登录,我上传图像,然后我立即看到5个帖子。在此处查看我的屏幕截图以获得更好的显示效果http://i.imgur.com/VXwlbra.png

如果单击图像,标题也是如此。如果我放弃一个标题,那么它也显示在其他用户身上。 我上传时的代码:

uploadfile.php 这里我将上传的文件存储到数据库中。

<?php


if (isset($_POST['submit_pica'])) {

    $newName = md5(time().$_FILES['pica']['tmp_name']).'.jpeg';

    $postTitle = $_POST['postTitle'];

    $ses_user = $_SESSION['username'];

    $getuserid = mysqli_fetch_assoc($mysqli->query("SELECT id FROM users WHERE username='$ses_user'"));
    $userid = $getuserid['id'];

    $result = $mysqli->query("INSERT INTO picas (id, name, title, created_at, user_id)
                            VALUES (null, '$newName', '$postTitle', null, '$userid')");

    echo "<script>
            $('.upload_button').click(function() {
                $('#uploadform').slideUp(300);
            });
         </script>";

    move_uploaded_file($_FILES['pica']['tmp_name'], 'upload/'.$newName);

}

?>

showimages.php (这里我输出数据库中的图片。

<?php
$result = $mysqli->query("SELECT *
                          FROM picas, users
                          ORDER BY created_at DESC");


$ses_user = $_SESSION['username'];

while($pica = $result->fetch_assoc()) {

    echo '<div class="image_post">
            <div class="user_avatar"><img src="avatars/'.$pica['username'].'.jpeg" /></div>
                <div class="user_name">'.$pica['username'].'</div> <br><br><br>
                <div class="image_title">'.$pica['title'].'</div>
                <img src="upload/'.$pica['name'].'" />
          </div>';

}

?>

我的朋友说我必须创建一个外来键,以便在来自user_id的{​​{1}}和来自picas的{​​{1}}之间建立关系。

显然它没有用。我从一切都得到了最新版本。

我只能选择:user_idusers表(逻辑,因为这是我唯一拥有的表),然后在它旁边的选项字段中,我只能选择{{ 1}}或users(取决于我选择的表格)。

它给了我这个错误:http://i.imgur.com/2ukfKsH.png 在imgur链接中,您还可以看到我填写的内容。我转到桌面: picas&gt; <结构>关系视图

它不起作用。我希望使用外键是新闻源的这个问题的解决方案,因为我希望在上传图像时,它输出上传了上传图像的用户,而不是它那样做+所有其他存储的用户在数据库中。请帮我。我已经为这一周奋斗了一周。它让我发疯了!

1 个答案:

答案 0 :(得分:0)

感谢您对此问题的关注。

专业提示:避免在软件查询中使用SELECT *。使用SELECT *可以让您在思考结果集中的内容时马虎。

专业提示:如果您需要来自多个表的结果,请使用JOIN指令而不是以逗号分隔的表列表。这使您可以清楚地思考表格如何相互关联。

您正在使用此查询来显示您的商品。

SELECT *               /*wrong!*/
  FROM picas, users    /*combinatorial explosion!*/
 ORDER BY created_at DESC

此查询使用来自picasusers的所有行的可能组合来汇总结果集。幸运的是,您还没有picas中的50个用户和100个条目,或者此查询将产生5000行。

您的查询所需的内容如下:

 SELECT users.user_id, users.username,
        picas.id, picas.name, picas.title, picas.created_at
   FROM users
   JOIN picas ON users.user_id = picas.userid
  WHERE users.username = '$ses_user'
  ORDER BY picas.created_at DESC

这将使用我提到的列构造结果集。它将使用ON子句中的标准以一种有意义的方式连接两个表中的数据。