【问题标题】:4 tables sql join4个表sql连接
【发布时间】:2013-04-05 14:27:34
【问题描述】:

几乎尝试了 1 小时,但无法修复。

我有一个这样的数据库。

类别

  • catid
  • 猫名

子类别

  • subcatid
  • 子目录名
  • catid

标签

  • 即时
  • subcatid

颜色

  • imgid
  • 颜色

我有很多图像,让我们用 imgid 1 拍摄图像 1

类别

  • catid
    2
  • 猫名
    技术

子类别

  • subcatid
    3
  • 子猫名
    自行车
  • catid
    3

标签(我们在 img 1 上有 2 个标签)

  • 无拘无束 1

  • subcatid 3

  • 无拘无束 1

  • subcatid 4 颜色

  • imgid 1

  • 颜色 蓝色

所以 1 张图片可以有多个子类别,例如自行车和汽车(图片上有自行车和汽车),所以 2 个标签 1 张图片。

我现在想做的是我从类别 2 中获得所有蓝色的 imgid(我知道我可以使用 colorid 并将颜色名称添加到 colorid 但让我们使用颜色名称使其更容易一些)

但我只想要每个 imgid 1 次。 所以我想做的是一个查询,比如我是否在页面 Category?id=1?color=blue

我得到 catid =1 和 color=blue

首先我需要获取 catid =1 的 subcatid

然后我需要获取标签 = sucatid 和颜色 = 蓝色的 imgid

然后我只想要唯一的值

所以 Imgid 1 被返回 1 次。

最重要的是,一切都在 php 中!

我希望有人能以正确的方式帮助我?

【问题讨论】:

    标签: php sql


    【解决方案1】:
    $resultimg = mysql_query("SELECT DISTINCT * FROM Category 
                JOIN SubCategory
                ON Category.CatId = SubCategory.CatId
                LEFT JOIN Color
                ON Color.imgid=SubCategory.imgid
                LEFT JOIN Tags
                ON Tags.subcatid=SubCategory.subcatid
                WHERE Color.color = '".$color."' AND Categorie.CatId = ".$CatId);
    

    【讨论】:

    • 请注意mysql_* 函数已被弃用。请改用PDO 或 MySQLi。此外,您的示例查询使您面临 SQL 注入攻击。见bobby-tables.com
    • 嗯,我发现它只给出最后一个 id 的结果,所以如果我在 CatId 1 中都有 subcatid 1 subatid 2,我只会得到 subcatid 2 的结果
    猜你喜欢
    • 1970-01-01
    • 2016-10-16
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多