「サイト構築」は素晴らしいですね!
あまりにお手軽なので、まるでlocalhostでカスタマイズしている感覚です。
本日は、イベント案内の最初の画面で発行されるqueryについて質問させていただきます。
発行するqueryは以下のようですが、ORDER BY句の前の(expire1268380972)がよくわかりません。
SELECT e.eid, cdate, title, summary, closetime, IF(expersons IS NULL,persons, expersons) persons, IF(exdate,exdate,edate) edate, IF(x.reserved,x.reserved,o.reserved) reserved, reservation, uid, status, style, counter, topicid, exid, exdate FROM 8821c7_eguide e LEFT JOIN 8821c7_eguide_opt o ON e.eid=o.eid LEFT JOIN 8821c7_eguide_extent x ON e.eid=eidref WHERE status=0 AND ((expire>=edate AND expire>1268380972) OR (expire1268380972)) ORDER BY edate ASC
生成されたqueryでは、ソースコード index.php の 26行目
(IF(exdate,exdate,edate)+expire)>$now)
の部分の不等号 > が消えているようなのです。
エラーにはなっておりません。
この辺りをカスタマイズしようかと思っておりますので、その前に疑問を解決しておきたいと考えております。
なにとぞよおろしくお願いいたします。
これは、イベント案内のどの版の話でしょうか?
現状の eguide 2.6 を使った場合、記載されているような SQL にはなってないはずです。
掲載されている案内の一覧を取得する部分と思いますが、いまは次のような SQL になっています。
SELECT e.eid, cdate, title, summary, closetime,
IF(expersons IS NULL,persons, expersons) persons,
IF(exdate,exdate,edate) edate,
IF(x.reserved,x.reserved,o.reserved) reserved,
reservation, uid, status, style, counter, topicid, exid, exdate
FROM e76c2d_eguide e
LEFT JOIN e76c2d_eguide_opt o ON e.eid=o.eid
LEFT JOIN e76c2d_eguide_extent x ON e.eid=eidref
WHERE status=0 AND ((expire>=edate AND expire>1268459341) OR (expire<edate AND (IF(exdate,exdate,edate)+expire)>1268459341))
ORDER BY edate ASC LIMIT 10
すばやい御回答有難うございました。
versionも記入せずに大変失礼いたしました。eguideのversionは2.60です。
ソースコードでは御回答にあるようなqueryになると思われますが、echoでqueryを画面表示させてみると(IF(exdate,exdate,edate)+expire)>1268380972)になるはずの部分が(expire1268380972)になっていましたので...。
もう少し調べてみます。
引用:
って、エスケープもせずにブラウザに出したら、正しく表示はされませんよ。
WHERE status=0 AND ((expire>=edate AND expire>1268459341)
OR (expire<edate AND (IF(exdate,exdate,edate)+expire)>1268459341))
タグと解釈されて表示されなかっただけの話でしょう。
SQL を見たいなら、XOOPS の管理メニューの全般設定で、「デバッグモードを有効にする」を「MySQL/Blocksデバッグ」にすればいいですよ。
あるいは
SuinDebugプリロードもスマート。
安富伸浩様。
冷や汗ものの大失態です。お恥ずかしい限りです。
ご指摘有難うございました。