質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

815閲覧

whereメソッドでレコードを抽出できない、なぜなのか

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/06/17 07:29

編集2019/06/17 07:40

前提・実現したいこと

whereメソッドを使って指定した条件のレコードを引っ張りたいです。
DBにMysqlを使用しています。
courtsテーブルには緯度(:latitude)経度(:longitude)のカラムを持つレコードがあります。

発生している問題・エラーメッセージ

Court.where(name: 'test1')のようにnameカラムであれば問題なく抽出できました。
Court.where(latitude: 34.9988)とすると[]が出力されてしまいます。
nameのデータ型はstring、
latitudeのデータ型はfloatです。

該当のソースコード

SQL

1[1] pry(main)> duplicate = Court.group(:latitude).having('count(*)>=2').pluck(:latitude) 2 (0.3ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483 3 (0.3ms) SELECT `courts`.`latitude` FROM `courts` GROUP BY `courts`.`latitude` HAVING (count(*)>=2) 4=> [34.9988] 5[2] pry(main)> Court.where(latitude: duplicate) 6 Court Load (0.5ms) SELECT `courts`.* FROM `courts` WHERE `courts`.`latitude` = 34.9988 7=> [] 8[3] pry(main)> Court.where(latitude: 34.9988) 9 Court Load (0.4ms) SELECT `courts`.* FROM `courts` WHERE `courts`.`latitude` = 34.9988 10=> []

###ひとこと
どうかお力を貸してください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/06/17 07:33

34.9988と34.988は同じではないですが、本当にそう入力されましたか?
退会済みユーザー

退会済みユーザー

2019/06/17 07:41

mts様 記載ミスです、修正しました 入力は正しく行いました ご指摘ありがとうございます!
m.ts10806

2019/06/17 07:48

了解です。ご対応ありがとうございます。
guest

回答2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/17 07:58

sazi様 回答ありがとうございます double型にして対応しましたが、double(桁数, 小数点以下の桁数)みたいな書き方もできるんですね 参考記事助かりました!
sazi

2019/06/17 08:04

演算があるなら、doubleより低速ですけど、DECIMAL型の方が安全ではあります。
guest

0

ベストアンサー

latitudeのデータ型はfloatです。

浮動小数点数の場合、見た目は同じ数でも丸められて同じに見えているだけ、という例が環境によって発生します。

ピタリ同じ数で取得するのではなく、.where(latitude: 34.99875..34.99885)のように一定の幅をもたせて検索したほうがいいでしょう。

投稿2019/06/17 07:32

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/17 07:39

maisumakun様 早速の回答ありがとうございます .where(latitude: 34.99875..34.99885)を試したところ取り出すことができました。 データベースにもっと細かく保存する方法?調べてみようと思います。 本当に助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問