2006/03/07(Tue) [長年日記]
_ 朝
07:00am起床。
_ Nucleus + MySQL5系統での不具合ががが
NP_MultipleCategoriesを導入したら、いきなり下記のエラーを吐くようになって焦った。
mySQL error with query SELECT i.inumber as itemid, i.ititle as title, i.ibody as body, m.mname as author, m.mrealname as authorname, UNIX_TIMESTAMP(i.itime) as timestamp, i.itime, i.imore as more, m.mnumber as authorid, c.cname as category, i.icat as catid, i.iclosed as closed FROM nucleus_item as i, nucleus_member as m, nucleus_category as c LEFT JOIN nucleus_plug_multiple_categories as p ON i.inumber=p.item_id WHERE i.iauthor=m.mnumber and i.iblog=1 and i.icat=c.catid and i.idraft=0 and i.itime<="2006-03-08 00:32:59" and ((i.inumber=p.item_id and (p.categories REGEXP "(^|,)3(,|$)" or i.icat=3)) or (i.icat=3 and p.item_id IS NULL)) ORDER BY i.itime DESC LIMIT 0,10: Unknown column 'i.inumber' in 'on clause'
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in E:\Program Files\xampp\htdocs\nucleus\libs\BLOG.php on line 169
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in E:\Program Files\xampp\htdocs\nucleus\nucleus\libs\BLOG.php on line 208
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in E:\Program Files\xampp\htdocs\nucleus\nucleus\libs\BLOG.php on line 217
調べてみると、このエラーはMySQL5系統を使っているときに発生する模様。確かに会社の環境は4系統。XAMPPで一括導入した自宅の環境は5系統。ここがハマりどころだったのかorz
原因は、バージョンが上がったことで、SQLのSELECT文のJOIN部の扱いが変わったこと、らしいです。via Nucleus(JP)フォーラム :: トピックを表示 - NP_MultipleCategoriesでSQLエラー
Nucleusのフォーラムでも、5系統は諦めろ的な返答が書かれていたりしてぐんにょり。何とかならないものか、と思ってもうちょっと頑張ったらありました。
476 :Trackback(774):2005/12/13(火) 00:31:47 ID:ttHIFht2
喪前様方に質問なのですが…
このたび我が家の鯖をリプレイスすることになって、新環境に
php5.1.1、mysql5.0.16、apache2.2.0を導入してみました
上記環境はうまくリンクして、その上で旧環境から移行したnucleusとDBのデータも
問題なく読み書きできると思っていたのですが…
通常は問題ないのですが、Multiple Categoriesにて生成したカテゴリリンクを押下したときに、
以下のようなエラーが発生します。(長いです)
mySQL error with query SELECT i.inumber as itemid, i.ititle as title, i.ibody as body, m.mname as author, m.mrealname as authorname,
UNIX_TIMESTAMP(i.itime) as timestamp, i.itime, i.imore as more, m.mnumber as authorid, c.cname as category, i.icat as catid, i.iclosed as closed
FROM nucleus_item as i, nucleus_member as m, nucleus_category as c
LEFT JOIN nucleus_plug_multiple_categories as p ON i.inumber=p.item_id
WHERE i.iauthor=m.mnumber and i.icat=c.catid and i.iblog=1 and i.itime<="2005-12-13 00:25:15" and
((i.inumber=p.item_id and (p.categories REGEXP "(^|,)3(,|$)" or i.icat=3)) or (i.icat=3 and p.item_id IS NULL)) and i.idraft=0
ORDER BY i.itime DESC LIMIT 0,5: Unknown column 'i.inumber' in 'on clause'
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/blog/nucleus/libs/BLOG.php on line 166
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/blog/nucleus/libs/BLOG.php on line 203
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /var/www/blog/nucleus/libs/BLOG.php on line 212
エラーを吐いてるSQL文をmysqlクライアントでDBにログインし発行しても、同じエラーを吐きます
このsql文以外で外部結合を行っているものは問題なく結果が返ってくるのですが
思い当たる節のある方はいらっしゃらないでしょうか?
mysqlのダウングレードは先ほどやってみて、別件でダウングレード失敗してしまい
現在システムバックアップからシステムを書き戻した状態です
やっぱりダウングレードが一番いいかな?
477 :Trackback(774):2005/12/13(火) 00:33:53 ID:ttHIFht2
>>476
やば…
1に質問はフォーラムのほうって書いてありますね
すまんかった
取り下げます
478 :Trackback(774):2005/12/15(木) 13:01:30 ID:HymXFDZf
>>476
自己レス
自己解決できたので、一応方法をここに記述しておきます
NP_ShowBlogs.phpの285行目
$query .= ' FROM '.sql_table('item').' as i, '.sql_table('member').' as m, '.sql_table('category').' as c'.$mtable ;
を
$query .= ' FROM '.sql_table('member').' as m, '.sql_table('category').' as c, '.sql_table('item').' as i'.$mtable ;
のように修正(別名iのついたテーブルの記述を一番最後に記述)
ただいま検証中だけど、問題なさそう
NP_ShowBlogs.phpの最新バージョンだと直ってるとかあるかもしれない…
うちの環境はShow Blogs for Subを利用していました
479 :Trackback(774):2005/12/15(木) 13:16:03 ID:HymXFDZf
>>478
連続すまん
一応言っておくと、旧環境(mysql4.0.24)ではこんな修正必要ないのでおそらくmysqlのバグだと思う
なので、mysql5.0.16とか5.0.13rcとか利用しない人はこんなの必要ないよ
480 :Trackback(774):2005/12/16(金) 12:08:19 ID:cKvy5QxM
>>479
> Before MySQL 5.0.12, the comma operator (,) and JOIN both had the same precedence,
> so the join expression t1, t2 JOIN t3 was intrepreted as ((t1, t2) JOIN t3). Now JOIN
> has higher precedence, so the expression is interpreted as (t1, (t2 JOIN t3))
http://dev.mysql.com/doc/refman/5.0/en/join.html
明示的にネストするかcross joinしろということのようだけど
[Nucleus CMS part2より引用]
というわけで、NP_MultipleCategories.phpの570行目と、750行目前後にある、クエリを生成している部分をちょいと書き換えてみました。
//$query .= ' FROM '.sql_table('item').' as i, '.sql_table('member').' as m, '.sql_table('category').' as c';
$query .= ' FROM '.sql_table('member').' as m, '.sql_table('category').' as c, '.sql_table('item').' as i';
これでOK。まぁ、面倒ならMySQLは4系統を使っておけということですかね。