今日も今日とて

トップ «前の日記(2006/03/06(Mon)) 最新 次の日記(2006/03/08(Wed))» 編集

2006/03/07(Tue) [長年日記]

晴れ 最高気温:11℃ 最低気温:-1℃

_

07:00am起床。

[Tags: つれづれ ] [このエントリを含むはてなブックマーク | このエントリを含むMM/Memo | このエントリを含むdel.icio.us] [Permalink]

_ 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系統を使っておけということですかね。

[Tags: Nucleus ] [このエントリを含むはてなブックマーク | このエントリを含むMM/Memo | このエントリを含むdel.icio.us] [Permalink]
[]
本日のPingbacks(全0件)