0

背景: 私は、2006 年頃にまとめられた内部サイトを更新するプロジェクトに取り組んでいます (それよりも前かもしれませんが、はっきりとはわかりません)。「レポートの印刷」機能を Web ベースのプラットフォームに移行し、Microsoft Access からレポートを作成して印刷できる ODBC ドライバーから遠ざけます。

各レポートで利用できる特定の情報のみが必要なため (それ以外の場合は、すべてのデータを取得し、目的の列自体で並べ替えるだけです)、クエリをビューに変換し、php がビューをクエリしてからフォーマットします表形式のデータ。

これは、3 つのテーブルからデータを取得し、2 つの結合を持つビューで機能しました。

テーブル: アクセント、ハンター、レプラコーン。結合は、ハンターとレプラコーンの名前を取得するためのものであり、ID 番号の代わりにそれらが表示されます。

SELECT 
 CONCAT(LEFT(a.red_id,1),'-',RIGHT(a.red_id,5)) AS red
, a.orange
, a.yellow
, a.green
, a.blue
, DATE_FORMAT(a.color_begin, '%m/%d/%y') AS color_start
, DATE_FORMAT(a.color_end, '%m/%d/%y') AS color_end
, DATE_FORMAT(a.rainbow_begin, '%m/%d/%y') AS rainbow_start
, DATE_FORMAT(a.rainbow_end, '%m/%d/%y') AS rainbow_end
, SUBSTRING(l.lastname FROM 1 FOR 10) as leprechaun
, SUBSTRING(a.keywords FROM 1 FOR 25) as keyword
, CONCAT(h.firstname, ' ', h.lastname) AS treasureHunter
, a.indigo
, CONCAT(LEFT(a.color_rate * 100, 2), '%') as color_percent
, a.violet  
FROM accents a
JOIN hunters h ON a.treasureHunter_id = h.hunter_id
JOIN leprechauns l ON a.leprechauns_id = l.leprechauns_id
WHERE rainbow_end >= sysdate() - INTERVAL 90 day
AND 
LEFT(red_id, 1) ='5'
ORDER BY a.red_id ASC;

これは正常に機能し、結果が画面に適切に表示されます。


次に、アクセント テーブルから取得しますが、今回は、特定のレコードに使用されている paintColor のブランドの頭字語を取得する必要があります。だから私はいくつかの異なるテーブルから引っ張っています:

  • アクセント、レプラコーン、ペイントカラー、ブランド。
  • アクセント: paintColor_id
  • paintColors: paintColor_id、brand_id
  • ブランド: brand_id、頭字語

私はクエリのためにこれを持っています:

SELECT
CONCAT(LEFT(a.red_id,1),'-',RIGHT(a.red_id,5)) AS red
, DATE_FORMAT(a.rainbow_end, '%m/%d/%y') AS rainbow_end
, SUBSTRING(l.lastname FROM 1 FOR 10) as leprechaun
, SUBSTRING(a.keywords FROM 1 FOR 25) as keyword
, b.acronym
, a.pink
FROM accent a
JOIN leprechauns l ON a.leprechauns_id = l.leprechauns_id
LEFT OUTER JOIN paintColors p ON a.paintColor_id = p.paintColor_id 
LEFT OUTER JOIN brands b ON b.brand_id = p.brand_id
WHERE a.paintColor_id = p.paintColor_id
AND a.active = '1'
AND rainbow_end >= SYSDATE() - INTERVAL 90 DAY
AND LEFT(a.red_id, 1) = '5'
ORDER BY b.acronym ASC;

このクエリは MySQL の観点から機能します。ワークベンチを使用すると、GUI で結果が正しく返されます。

しかし、Web ページでいくつかのエラーがスローされるため、このクエリが適切に記述されているかどうか疑問に思っています。php は、上記のクエリで使用したものと同じコードです。ビューを選択し、結果を取得し、結果をループして表形式のデータの行を作成します。

エラー メッセージ:

  1. mysql_fetch_assoc(): 指定された引数は有効な MySQL 結果リソースではありません
  2. mysql_fetch_result(): 指定された引数は有効な MySQL 結果リソースではありません

私の具体的な質問: 問題を引き起こしているのは 2 つの LEFT OUTER JOINS でなければならないため、これら 2 つの結合 (および WHERE 句) をより適切な方法で記述して、エラーが発生しないようにすることはできますか?

編集して追加: コードは素晴らしいです。それはまったく別のものでした!

4

0 に答える 0