- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
对于一个房地产网站,我需要实现一个允许搜索文本和距离的搜索机制。
当 lat 和 lon 记录在单独的列中时,在 MySQL 表上进行距离计算很容易,但房子往往有 LOT true/false
属性。
我需要将所有这些字段存储在数据库中,因为它们需要可编辑,所以我打算使用像 | 这样的简单表格房屋编号 | property |
我在其中存储所有为真(设置)的属性。
这将使我免于创建一个包含数百列的宽得离谱的表,但搜索该数据库将不太可行。
我考虑过在每个房屋的主记录中添加一个类型为 text
的列,其中包含所有 true
属性的字段名。然后我会搜索 human
文本描述和那个文本列,但我觉得这仍然不是最好的方法。
我怎样才能以干净的方式解决这个问题?
提前致谢!
最佳答案
我推荐使用Entity Attribute Value
或EAV
模型来存储数据。 http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model (这就是 Wordpress Posts 和 Post Meta 的工作方式)。
所以假设表格如下:
ENTITY_TABLE: (id,title,author,content,date_created,date_modified)
ATTRIBUTE_TABLE: (id, entity_id, akey, avalue)
使用这样的查询:
SELECT e.*,
MAX( IF(m.akey= 'has_ac', m.avalue, 0) ) as 'has_ac',
MAX( IF(m.akey= 'has_garage', m.avalue, 0) ) as 'has_garage',
MAX( IF(m.akey= 'has_fridge', m.avalue, 0) ) as 'has_fridge',
MAX( IF(m.akey= 'latitude', m.avalue, 0) ) as 'latitude',
MAX( IF(m.akey= 'longitude', m.avalue, 0) ) as 'longitude'
FROM ENTITY_TABLE e
JOIN ATTRIBUTE_TABLE m ON e.id = m.entity_id
WHERE has_ac=1
这将选择实体及其相关属性(has_ac、has_garage、has_fridge、纬度和经度)并要求所有选定实体的 has_ac 等于 1(真)
现在是地理信息:
SELECT e.*,
MAX( IF(m.akey= 'has_ac', m.avalue, 0) ) as 'has_ac',
MAX( IF(m.akey= 'has_garage', m.avalue, 0) ) as 'has_garage',
MAX( IF(m.akey= 'has_fridge', m.avalue, 0) ) as 'has_fridge',
MAX( IF(m.akey= 'latitude', m.avalue, 0) ) as 'latitude',
MAX( IF(m.akey= 'longitude', m.avalue, 0) ) as 'longitude',
(
3959 *
acos(
cos( radians( MAX( IF(m.akey= 'latitude', m.avalue, 0) ) ) ) *
cos( radians( CUSTOMER_LAT ) ) *
cos( radians( CUSTOMER_LONG ) - radians( MAX( IF(m.akey= 'longitude', m.avalue, 0) ) ) ) +
sin( radians( MAX( IF(m.akey= 'latitude', m.avalue, 0) ) ) ) *
sin( radians( CUSTOMER_LAT ) )
)
) AS distance
FROM ENTITY_TABLE e
JOIN ATTRIBUTE_TABLE m ON e.id = m.entity_id
WHERE has_ac=1
ORDER BY distance ASC
关于mysql - 距离+关键词搜索方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11621637/
当我说这个 using (Entities db = new Entities()) { return db.TableName.AsQueryable().ToList(); } 因为返回了
它应该表现得像Delicious toolbar对于 Firefox 来说;它列出了可能要点击的标签。效果如下图: 代码应该能够找到文本的关键词。有什么好的算法或者开源项目推荐吗? 我找到了 this
我刚刚在市场上上传了我的第一个应用程序。一切顺利,看起来很好。我尝试了几个关键词来搜索它,这些词在我的描述和促销文本中也有,但有些词找不到我的应用程序,有些却找到了。 关键字策略如何在市场上的应用程序
我已经开始在我的提交消息中使用对 Maniphest 任务的引用,这对于自动关闭任务等非常有用。 我发现这个页面有很多关键词,但我很好奇是否有更多或任何关于如何使用它们的文档。 https://pha
我在 Qt 文档中遇到过这段代码: Counter a, b; QObject::connect(&a, &Counter::valueChanged, &b, &C
有人可以确认这是否确实是一个错误吗? (如果是这样,我将离开并将其提交给 Apple)。 尝试获取 kAudioSessionProperty_AudioRoute 在 4.3 之前的任何版本的模拟器
目前我正在使用它来搜索我的词典数组(来自 plist 文件): for(NSDictionary *wine in mainArray) { NSString *wineNam
我是一名优秀的程序员,十分优秀!