1

3 つのテーブル タグ、itemtags、およびトランザクションを結合しようとしています。Transactions は支払いのリストです。Itemtags は、トランザクション ID (「トランザクション」から) を、「タグ」の正しいタグの詳細に対応するタグ ID にリンクします。

「タグ」内の「タグ名」フィールドとトランザクション内の「請求日」の両方を表示できるように、3 つのテーブルすべてをリンクしたいと考えています。コードが機能しません - 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

最初の左結合にタイプミスがあり、エイリアスを使用して同じ列を 2 回取得できます

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 に答える