Kimura A
a.kim****@live*****
2014年 6月 27日 (金) 20:28:29 JST
木村です。 須藤さんご回答ありがとうございます。 > これだと、グループ化したうち、どのレコードのkanaの値を > 使うの?問題が発生するのでスジがよくなかったです。 たしかに、MySQLのゆるい仕様に依存していた部分がありました。 ご提案いただいたテーブル構成で、実際に動作確認もできました。ありがとうございます。 ベクターカラムと似たコメントを書くことでJOINできる、ということ自体が僕にとっては初耳だったので、たいへん勉強になりました。 ただ、実は1つ、こちらのご説明に手抜かりがありました。 情報の後出しになってしまって大変申しわけないんですが、ご指摘の「表記(name)は同じだが読み方(kana)が違う」レコードの存在は、今回、想定のうちに入れておきたいんですよね…。 要件が変わってしまってすみませんm(_ _;)m つまり、素のMySQLでいうと、以下のようなグループ化と並び替えを実現したい、ということになります。 CREATE TABLE t ( id int primary key auto_increment, name varchar(255), kana varchar(255) ) ENGINE = Mroonga DEFAULT CHARSET = utf8; SELECT *, count(id) AS c FROM t WHERE t.kana IS NOT NULL GROUP BY kana, name ORDER BY kana ASC LIMIT 10; 前回からの変更点は、 ○SELECTのGROUP BY条件を「name」から「name, kana」に変更 ○WHERE条件を追加(※実働環境での要件に近づけるため) の2つです。 たとえば、tテーブルに以下のようなレコードがあった場合、 INSERT INTO t (name, kana) VALUES ("トム", "とむ"); INSERT INTO t (name, kana) VALUES ("ジェリー", "じぇりー"); INSERT INTO t (name, kana) VALUES ("十夢", "とむ"); INSERT INTO t (name, kana) VALUES ("ミッキー", "みっきー"); INSERT INTO t (name, kana) VALUES ("トム", "とむ"); INSERT INTO t (name, kana) VALUES ("十夢", "じゅうむ"); // ※この行以降を追加しました INSERT INTO t (name, kana) VALUES ("トム", null); 欲しいのは以下のような結果です。 ジェリー, じぇりー, 1 十夢, じゅうむ, 1 トム, とむ, 2 十夢, とむ, 1 ミッキー, みっきー, 1 これをmroonga_command()で実現するにはどうすればよいでしょうか? 自分でも、ご提案いただいたテーブル構成をもとに、names.idカラムを追加してPRIMARYキーにしたり、新たにkanasテーブルを追加したりとあれこれ試してみたのですが、ちゃんと動く構成を見つけることができませんでした…。 引き続きアドバイスいただければ幸いです。 どうぞよろしくお願いしますm(_ _)m