1

我正在尝试加入 3 个表标签、项目标签和交易。交易是付款清单。Itemtags 将 transactionid(来自“transactions”)链接到与“Tags”中正确的标签详细信息对应的 tagid。

我想链接所有三个表,以便我可以在 Transactions 中看到“Tags”和“Billdate”中的“tagname”字段。我的代码不起作用 - 当我尝试执行 mysql_fetch_array 时,出现以下错误:

“警告:mysql_fetch_array() 期望参数 1 是资源,布尔值”

任何帮助都感激不尽!

$list = mysql_query("SELECT
tags.tagid,tags.tagname,
itemtags.tagid,itemtags.transactionid 
transaction.transactionid,transaction.billdate
FROM 
tags 
  LEFT JOIN itemtags ON tags.tagid = itemtags.tagid
  LEFT JOIN transaction ON itemtags.transactionid = transaction.transactionid
WHERE
DATE(`transaction.billdate`) >= '$startdate' AND 
DATE(`transaction.billdate`) <= '$enddate'
");

while($val=mysql_fetch_array($list)) {
print ' '.$val['tagid'].' - '.$val['tagname'].' ||';
}
4

2 回答 2

2

您的查询肯定有错误,要调试导致的错误,请使用下面的代码。

mysql_query($query) or die(mysql_error());

这将导致打印出 sql 查询抛出的正确错误,一旦您告诉我确切的错误是什么,我会很乐意帮助您查询:)

更正后的查询或更接近正确的查询应如下所示。请注意,我已经调整了您的日期比较,因为不需要 DATE() 语法:)

SELECT
    tags.tagid,
    tags.tagname,
    itemtags.tagid,
    itemtags.transactionid,
    transaction.transactionid,
    transaction.billdate
FROM tags 
  LEFT JOIN itemtags ON tags.tagid = itemtags.tagid
  LEFT JOIN transaction ON itemtags.transactionid = transaction.transactionid
WHERE
transaction.billdate >= '$startdate' AND 
transaction.billdate <= '$enddate'
于 2012-05-07T00:53:04.897 回答
0

您在第一个左连接中有错字,您可以使用别名来两次获取同一列

mysql_query("SELECT
tags.tagid,tags.tagname,
itemtags.tagid,itemtags.transactionid as itemtagstransid, 
transaction.transactionid as transtransid,transaction.billdate
FROM 
tags 
  LEFT JOIN itemtags ON tags.tagid = itemtags.tagid
  LEFT JOIN transaction ON itemtags.transactionid = transaction.transactionid
WHERE
DATE(`transaction.billdate`) >= '$startdate' AND 
DATE(`transaction.billdate`) <= '$enddate'
");`
于 2012-05-07T00:48:03.703 回答