【问题标题】:MySQL query with left Join?带有左连接的MySQL查询?
【发布时间】:2011-09-08 00:37:50
【问题描述】:

我有两张桌子: 项目:

| Item|
   A
   B
   C

用户项:

| UID |  Item
   1      A
   1      C

此循环显示来自表 Items 的数据:

$data = mysql_query("SELECT * FROM `Items`ORDER by `Icons` ASC"); 

while($row = mysql_fetch_array( $data )) 
    {
    echo $row['Item'];
    echo "Unlock";
    }

如果 UID = $uid 的用户拥有该项目,基本上我需要显示 Unlocked 而不是 Unlock。

此查询获取用户项目:

$data = mysql_query("SELECT * FROM `userItems` WHERE `UID` = '$uid'"); 

我相信解决方案是左连接,但我不知道该怎么做。我怎样才能让它发挥作用?

【问题讨论】:

  • 你为什么要从Items表中查询呢? userItems 中也有 Item 列。
  • 我可以在注册时将所有项目插入userItems 并添加另一列,但如果我以后想添加新项目,使用不同的表会更容易。
  • @zerkms 我认为Items 表中的内容不仅仅是单列,例如Icons
  • @Phil:那就是个坏例子 ;-) 程序员解决问题,而不是做出预测

标签: mysql sql


【解决方案1】:
SELECT Items.*, useritems.UID FROM `Items` 
    left join useritems on Items.Item=useritems.Item 
    ORDER by `Icons` ASC

然后在你的 PHP 中使用逻辑在用户 $row["items.UID"] 等于 $uid 时显示 Unlocked

【讨论】:

  • 我会将* 更改为Items.*, userItems.UID。只是不能遵守带有连接表的单个*。谁知道你会得到什么
  • 你是对的。我不知道这些表中可能隐藏着什么。 ;)
  • @Liso22 你在开玩笑!我已经好几个月没有做 SQL 了。我想我肯定会在某处出现语法错误或细节丢失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2015-02-22
  • 2022-11-11
  • 2016-08-30
相关资源
最近更新 更多