【问题标题】:SQL Query Grabbing data from two tablesSQL查询从两个表中抓取数据
【发布时间】:2026-02-12 09:00:02
【问题描述】:

我现在的代码是这样的

$extract = mysqli_query($dbc, "SELECT * FROM items");
$numrows = mysqli_num_rows($extract);
while($row = mysqli_fetch_assoc($extract)) {
    $id = $row['i_id'];
    $iname = $row['i_name'];    
    echo "<tr><td><a href='capture.php?item_id=$id'>$iname</a></td><td>Incomplete</td></tr>";
}

我想要做的是检查项目是否已经完成。 我有一个包含信息的单独表格,例如说第 1 项已经完成,然后我希望能够将我的回声更改为:

 echo "<tr><td>$iname</td><td>Complete!</td></tr>";

我将如何做到这一点?我需要使用某种形式的连接语句吗?

我希望能够显示表中的所有项目但不重复它们我最初认为在 echo 上使用 if 语句来查看项目是否完成然后执行此操作否则执行此操作

这是两张表

Items                      item_collection
------                     ---------------
i_id                       i_id
i_name                     complete
                           caption
                           image
                           c_id
                           g_id

【问题讨论】:

  • 请包含您的数据库结构。
  • 你能发布两张表的表结构吗?
  • 是的,很抱歉,让我快速完成这项工作
  • @JoshC.,给定项目的 item_collection 表中会有多行吗?
  • 是的,每个组 (g_id) 将包含单个项目的信息。可以有。

标签: php mysql sql join


【解决方案1】:

你可以像这样使用连接条件(假设 complete 是一个 varchar 字段)

SELECT a.i_id, a.i_name,
CASE WHEN i_status = '1' THEN 'Complete!' ELSE 'Incomplete' END AS complete_status
FROM items a 
LEFT OUTER JOIN item_collection b ON a.i_id = b.i_id

【讨论】:

    【解决方案2】:
    select 
    case 
      when ic.complete = 1 then 'Complete'   
      else 'Incomplete'
    end as item_status
    from items i
    left join item_collection ic on i.i_id = ic.i_id
    where i.i_name = 'your_item_name'
    

    假设当项目完成时 ic.complete = 1。

    【讨论】:

    • 这会显示所有项目吗?因为我最初认为在 echo 上使用 if 语句来查看项目是否完成然后执行此操作,否则执行此操作
    • @JoshC。这将返回特定项目 where i.i_name = your_item_name 的状态。
    【解决方案3】:

    类似于 SELECT * FROM table1 WHERE table1.id not in (SELECT Id FROM table2) 的内容

    【讨论】: