MATCHとBETWEENを併用したい

このQ&Aのポイント
  • namesテーブルのcontentsカラムにねこを含むレコードのうち、現在までに書き込まれたものを新しいものから抽出する方法について教えてください。
  • SELECT文の条件として、MATCHとBETWEENを併用したいのですが、正しく出力されません。具体的には、AND BETWEEN句が誤っている可能性があります。
  • どのように修正すれば、MATCHとBETWEENを正しく組み合わせて使用できるのか、ご指摘いただけますか?
回答を見る
  • ベストアンサー

MATCHとBETWEENを併用したい

namesテーブルのcontentsカラムにねこを含むレコードのうち、 現在までに書き込まれたものを新しいものから抽出したいと思います。 contentsはverchar(255)、unixtimeはint(11)です。 しかし、 SELECT * FROM names WHERE MATCH (contents) AGAINST ('+ねこ' IN BOOLEAN MODE) AND BETWEEN unixtime < 1360850220 ORDER BY `unixtime` DESC limit 1,50 ; が出力されません。 このSQL文はどこが間違っているのか、ご指摘ください。 SELECT * FROM names WHERE MATCH (contents) AGAINST ('+ねこ' IN BOOLEAN MODE) ORDER BY `unixtime` DESC limit 1,50 ; だと出力されるので AND BETWEEN unixtime < 1360850220 が怪しいと思うのですが、どう訂正したらいいのかわかりませんでした。 よろしくお願いいたします。

  • MySQL
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • axuaxua
  • ベストアンサー率36% (82/223)
回答No.1

それほど詳しくない上にMyISAMのデータベースが無く実験も出来ませんが知ったかで回答します。 AND unixtime BETWEEN UNIX_TIMESTAMP(NOW()) AND 1360850220; で現在から1360850220の間のunixtimeにマッチすると思います。

関連するQ&A

  • mysqlのmatch() against()で検索結果が取得できませ

    mysqlのmatch() against()で検索結果が取得できません。 select * from fulltexttable where match( a ) against( '+ほげ' in boolean mode ) で検索結果は0件ですが、 select * from fulltexttable where a like '%ほげ%' だと検索結果は取得できます。 aカラムにはフルテキストインデックスは貼ってあります。 mysqlのバージョンは5.0.77 hogeテーブルはMyISAM どなたか助けてください。

  • mysql 全文検索で引っかからないワードがある

    mysqlのfulltextを使用した全文検索で引っかからないワードがあって困っています。 例えば、keywordsテーブルにwordsカラムに以下のレコードがあったとします。 -------------- ジェフ トム ram -------------- このとき、下記のsqlを発行してもジェフやramが引っかかりません。 SELECT * FROM `keywords` WHERE MATCH(words) AGAINST('ジェ*' IN BOOLEAN MODE); SELECT * FROM `keywords` WHERE MATCH(words) AGAINST('ram*' IN BOOLEAN MODE); (※以下は引っかかる SELECT * FROM `keywords` WHERE MATCH(words) AGAINST('トム*' IN BOOLEAN MODE); ) もちろん、カラム定義には、alter table keywords add fulltext(words)をしています。 またFull-Text Stopwordsもデフォルトのままです。 どんな原因があるか分かる方いらっしゃいますでしょうか? 以上、よろしくお願い致します。

  • MySQLで全文検索について

    MySQLで全文検索を行いたく、色々と調べ、試行錯誤をしたのですが どうしてもできないので、mysqlでの全文検索のやり方がわかるかたがいらっしゃいましたら お教え願えますでしょうか。 私がやったこと 0。Mysqlのバージョン 5.5.23をインスコ  my.confにft_min_word_len=1を追加 mysql再起動 1。MyISAM型のbookテーブルを作成(utf8_general_ciでとりあえず idとsearch_wordsという2カラムのみ idをprimaryに設定) 2。検索対象であるsearch_wordsをFulltext型に変換   sql> alter table book add fulltext( search_words ); 3。データを登録   insert into book (id, search_word) value (1, '夏目漱石 こころ natsume souseki kokoro BOOK-NO-012 時は明治末期。夏休みに鎌倉へ旅行をしていた「私」は鎌倉に来ていた「先生」と出会い交流を始め東京に帰った後も先生の家に出入りするようになる。先生は奥さんと静かに暮らしていた。先生は私に何度も謎めいた、そして教訓めいたことを言う。私は、先生に過去を打ち明けるように迫ったところ来るべき時に過去を話すことを約束した。'); 4。mecabで分かち書きした、「夏目」「漱石」をスペースで区切った文字で検索   っがしかし、検索結果が帰ってこない 実行してみたSQL   select * from book where match( search_word ) against( '夏目 漱石' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '+夏目 +漱石' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '"夏目 漱石"' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '"+夏目 +漱石"' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '"+夏目 +漱石"' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '"*夏目 *漱石"' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '"*夏目* *漱石*"' IN BOOLEAN MODE);   「夏目漱石」とひとくくりにした文字列で検索すると、レコードが帰ってきます    また、against( 'natsume souseki' IN BOOLEAN MODE); も帰ってきます 実際にやってみたいことは、上記の文章で「先生」「鎌倉」「私」「夏目」の4語で検索すると 上記のレコードが帰ってくるということがやりたいですのですが、 select * from book where match( search_word ) against( '夏目 先生 鎌倉 私' IN BOOLEAN MODE); のSQLや対象文字列に+や*を付けたものを実行しても引っかかりませんでした。 私が行った設定/sqlに不備がございましたらご指摘/ご指導いただけませんでしょうか。 よろしくお願いいたします。

  • order byで並び変えし最大値の項目の抽出方法ついて

    すみません。 order byで並び変えし最大値の項目のみ一意で抽出したいのですが 、 SELECT * from ta order by no,date1,date2; no | date1 | date2 ----+-------+------- 11 | 2008 | 0501 11 | 2008 | 0502 11 | 2008 | 0502 11 | 2008 | 0503 12 | 2008 | 0501 12 | 2008 | 0502 12 | 2008 | 0503 13 | 2008 | 0501 13 | 2008 | 0502 13 | 2008 | 0503 14 | 2008 | 0501 とあった場合、 no,date1,date2のorder by順番で並び変えし 11 | 2008 | 0503 12 | 2008 | 0503 13 | 2008 | 0503 14 | 2008 | 0501 とno項目に対し一つずつだけ出力したい場合どのようにしたらよいのでしょうか? LIMITとoffsetだと1項目分しか出力されず困っております。 SELECT * from ta where no in (select no from ta group by no limit 1 offset 0) order by no,date1 desc,date2 desc limit 1; 宜しくお願い致します。

  • sqglについて

    sqlのlimitとdescは一緒に使えますか? 例 select * from hp order by limit id 0,20 order by id desc; idを小さい順に1~20個表示したいです。

    • ベストアンサー
    • MySQL
  • SQL文でエラーが出ます。

    MySQLの事で質問です。 テーブル1~4を結合してフィールド「comment」を検索 する時にフィールド「postDate」の降順でソートしたい のですがエラーが出ました。 「SQLコマンド」 select text from table1 union all select comment from table2 union all select comment from table3 union all select comment from table4 where match(commentIndex) against("検索ワード" in boolean mode) order by postDate desc; 試しに union all select comment from table2 union all select comment from table3 union all select comment from table4 の部分を削除して実行してみた所、成功しました。 後、order by postDate desc;のみ削除した場合でも成功しました。 エラーの内容はこれです↓↓ Unknown column 'postDate' in 'order clause' フィールド「postDate」は存在します。 (varchar型何ですが、それがいけないと思い date型やdatetime型と変えてみましたがダメでした) 何とかソートしたいのですがどうすればいいのでしょうか?

    • ベストアンサー
    • MySQL
  • MySQLで最小値

    次の様な連番が入ったseqというフィールドがあります。 => select seq from hoge order by seq desc; seq ----- 427 426 425 424 423 422 421 420 419 418 (10 rows) これにlimit 5とすると次の様にな結果になります。 => select seq from hoge order by seq desc limit 5; seq ----- 427 426 425 424 423 (5 rows) このlimit 5で表示された結果の最小値(423)を取得したいのですが 上手くいきません。(わかりません) min(seq)を試してみたのですが418が返ってきてしまいます。 => select min(seq) from hoge order by seq desc limit 5; min ----- 418 (1 rows) limitで表示された結果の最小値(423)を とる事はできるのでしょうか? どうぞ宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • EXPLAINのUsing filesortについて

    explain select * from address where area =1 order by id desc limit 10,1\G 上記クエリーをexplainで確認すると Extra: Using where; Using filesort が表示されてしまいます。 1. Using filesortを消したいのですが、idを降順で表示するのに order by id desc 以外の方法はありますか?このような場合、Using filesortは仕方ないのでしょうか? 2. Using whereは効率の悪いクエリーの要素になるのでしょうか?

    • ベストアンサー
    • MySQL
  • sql offset

    offsetやlimitをつけると 結果が表示されなくなります。 $sql='SELECT naiyo FROM zyoho WHERE cityid=? OR brandid=? だけのSQLだと結果は表示されるのですが。 解決方法をご教授お願いいたします。 下記はソースです。 $page=1; $limit=2; $offset = $limit * ($page - 1); $lastpage = ceil($total / $limit); if($brandid=='') { $sql='SELECT naiyo FROM zyoho WHERE cityid=? OR brandid=? ORDER BY `code` DESC LIMIT'.$limit.' OFFSET '.$offset.''; }else{ $sql='SELECT naiyo FROM zyoho WHERE cityid=? AND brandid=?ORDER BY `code` DESC LIMIT'.$limit.' OFFSET '.$offset.''; } $stmt=$dbh->prepare($sql); $data[]=$cityid; $data[]=$brandid; $stmt->execute($data); $dbh = null;

    • ベストアンサー
    • MySQL
  • クエリの遅さの原因

    下記のクエリーをそれぞれ試してみたところ、圧倒的に下の方が遅くなってしまいました。 $rs = mysql_query("select * from A INNER JOIN B ON B.cat = A.id order by B.id desc LIMIT 1, 10 ;",$con); $rs = mysql_query("select * from A INNER JOIN B ON B.cat = A.id where B.name is not null group by B.area order by B.id desc LIMIT 1, 10 ;",$con); where B.name is not null group by B.area この処理はそれほど負荷が掛かってしまうのでしょうか。 他に良い書き方(方法)がありましたら教えてください。

    • ベストアンサー
    • MySQL