我有一个cms存储对文章的评论.这些注释可以是线程的,也可以是非线程的.虽然技术上它们是相同的,只是在没有线程的情况下,回复列留空.我的应用程序适用于sqlLite,MySQL和pgsql,所以我需要相当标准的SQL.
我目前有一个评论表
comment_id
article_id
user_id
comment
timestamp
thread (this is the reply column)
Run Code Online (Sandbox Code Playgroud)
我的问题是弄清楚如何最好地代表数据库中的线程注释.也许在一个单独的表中支持没有内容的树集和一个简单的表来保存文本?也许它已经是这样了?或许另一种方式?
如果注释是非线程的,我可以很容易地按时间戳排序.
如果他们是线程我就像这样
ORDER BY SUBSTRING(c.thread, 1, (LENGTH(c.thread) - 1))
Run Code Online (Sandbox Code Playgroud)
正如您在ORDER BY中看到的那样,注释查询将不会使用索引,因为基于函数的索引实际上只存在于Oracle中.帮我快速点评评论页面.
这个查询出了什么问题:
SELECT co.*, mod.COUNT(*) as moduleCount, vid.COUNT(*) as vidCount
FROM courses as co, modules as mod, videos as vid
WHERE mod.course_id=co.id AND vid.course_id=co.id ORDER BY co.id DESC
Run Code Online (Sandbox Code Playgroud)
换句话说,我怎么能这样做,从'courses'返回的每个记录,还有一个名为'modCount'的列,它显示了该course_id的modules表中的记录数,另一个名为'vidCount',用于执行视频表同样的事情.
错误:
错误号码:1064
您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在' )附近使用正确的语法作为moduleCount,vid.COUNT()作为vidCount FROM course as co,'在第1行
假设我执行此操作:
(X / const) * const
Run Code Online (Sandbox Code Playgroud)
使用双精度参数定义IEEE 754-2008
,首先划分,然后乘法.
const
在范围内0 < ABS(const) < 1
.
假设操作成功(没有溢出),X
这个操作的不同参数是否保证返回不同的结果?
换句话说,还有什么X1
,X2
并0 < ABS(const) < 1
让X1 <> X2
,但(X1 / const) * const = (X2 / const) * const
?
我遇到了与将日期时间从XML(ISO8601:yyyy-mm-ddThh:mi:ss.mmm)转换为SQL Server 2005日期时间相关的问题.问题是转换毫秒是错误的.我已经使用nvarchar中的convert(datetime,MyDate,126)测试了隐式和显式转换,结果是相同的:
Original Result
2009-10-29T15:43:12.990 2009-10-29 15:43:12.990
2009-10-29T15:43:12.991 2009-10-29 15:43:12.990
2009-10-29T15:43:12.992 2009-10-29 15:43:12.993
2009-10-29T15:43:12.993 2009-10-29 15:43:12.993
2009-10-29T15:43:12.994 2009-10-29 15:43:12.993
2009-10-29T15:43:12.995 2009-10-29 15:43:12.997
2009-10-29T15:43:12.996 2009-10-29 15:43:12.997
2009-10-29T15:43:12.997 2009-10-29 15:43:12.997
2009-10-29T15:43:12.998 2009-10-29 15:43:12.997
2009-10-29T15:43:12.999 2009-10-29 15:43:13.000
Run Code Online (Sandbox Code Playgroud)
我的非广泛测试显示最后一位数字是0,3或7.这是一个简单的舍入问题吗?毫秒精度很重要,失去/获得一个或两个不是一个选择.
我知道通常情况下,构建mysql查询以命名您需要的每个项目总是更好的性能但是例如在个人资料页面上我可能需要除了少数几个项目之外的所有项目.
SELECT user_name,f_name,l_name,country,usa_state,other_state,zip_code,city,gender,birth_date,date_created,date_last_visit,
user_role,photo_url,user_status,friend_count,comment_count,forum_post_count,referral_count,referral_count_total,
setting_public_profile,setting_online,profile_purpose,profile_height,profile_body_type,profile_ethnicity, profile_occupation,profile_marital_status,profile_sex_orientation,profile_home_town,profile_religion,
profile_smoker,profile_drinker,profile_kids,profile_education,profile_income,profile_headline,profile_about_me,
profile_like_to_meet,profile_interest,profile_music,profile_television,profile_books,profile_heroes,profile_here_for,profile_counter FROM users WHERE user_id=1 AND user_role >
Run Code Online (Sandbox Code Playgroud)
因此,如果没有进行大量测试,也许有经验丰富的人可以提出一些建议吗?
这会更糟吗?
SELECT * FROM users WHERE user_id=1 AND user_role >
Run Code Online (Sandbox Code Playgroud)
我更喜欢列出所有项目,因为在那个页面上,如果我需要来自数据库的东西,但是如果它会更快,我就不会列出它们,这很容易看到我可以使用的东西.
我正在尝试构建一个查询,但我遇到了一些困难.
我有一个SQL Server 2008数据库,其中包含一个表,其中包括描述路段的地理字段.(此数据已从美国人口普查的TIGER/Line数据中导入.)
我还有一个描述用户位置的固定点.我想在数据库中找到最接近的路段,但我似乎无法弄清楚如何实现这一目标.此外,我想在该段上找到最接近用户位置点的点.这是我想要选择并在我的查询中返回的内容.
有没有人对地理/几何功能有任何经验可以帮助我?
谢谢!
我+
用来连接几个列的值.但+
如果其中一列具有空值,则无效.例如
Select null+ 'Test'
Run Code Online (Sandbox Code Playgroud)
查询返回null而不是'Test'.
你有什么建议来解决这个问题?
我正在测试PostgreSQL全文搜索(使用pg_search gem)和solr(sunspot_solr gem)的性能.
对于400万条记录,我获得了13456毫秒的Tsearch和800毫秒的SOLR(即SOLR查询+ DB回溯).很明显,我需要索引,但我不知道如何创建一个全文搜索.我调查并发现,对于全文搜索,我应该使用GIN索引.
execute "CREATE INDEX products_gin_title ON products USING GIN(to_tsvector('english', title))"
Run Code Online (Sandbox Code Playgroud)
但我正在搜索另外两列,我需要多值索引,我不知道如何实现它?我对DB部分不是很熟悉.我的搜索代码如下:
@results = Product.search_title(params[:search_term]).where("platform_id=? AND product_type=?", params[:platform_id], params[:type_id]).limit(10).all
Run Code Online (Sandbox Code Playgroud)
如何为此类情况创建正确的查询?
这是来自rails的搜索词车的 SQL输出.
Product Load (12494.0ms)
SELECT
"products".*,
( ts_rank((to_tsvector('simple', coalesce("products"."title"::text, ''))), (to_ tsquery('simple', ''' ' || 'car' || ' ''')), 2) ) AS pg_search_rank
FROM "products"
WHERE (((to_tsvector('simple', coalesce("products"."tit le"::text, ''))) @@ (to_tsquery('simple', ''' ' || 'car' || ' '''))))
AND (platform_id='26' AND product_type='2')
ORDER BY pg_search_rank DESC, "products"."id" ASC
LIMIT 10 …
Run Code Online (Sandbox Code Playgroud) 我在嵌套集模型中有分层数据(表:项目):
我的表(项目):
id, lft, rgt
1, 1, 6
2, 2, 3
3, 4, 5
4, 7, 10
5, 8, 9
6, 11, 12
7, 13, 14
...
Run Code Online (Sandbox Code Playgroud)
漂亮印刷:
1
2
3
4
5
6
7
Run Code Online (Sandbox Code Playgroud)
为了找到最近的节点3的超节点(知道它的lft值),我能做到
explain
SELECT projects.*
FROM projects
WHERE 4 BETWEEN projects.lft AND projects.rgt
Run Code Online (Sandbox Code Playgroud)
这给了我一个到节点3的路径中的项目列表.然后通过分组并找到结果的MAX(projects.lft),我得到最近的超级节点.但是,我似乎无法让这个查询快速运行,它不会使用我已经定义的索引.EXPLAIN说:
+----+-------------+----------+-------+----------------+----------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+----------------+----------+---------+------+------+--------------------------+
| 1 | SIMPLE | projects | index | …
Run Code Online (Sandbox Code Playgroud) 这两个陈述的表现完全不同:
mysql> explain select * from jobs where createIndexed=false;
+----+-------------+-------+------+----------------------+----------------------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+----------------------+----------------------+---------+-------+------+-------+
| 1 | SIMPLE | jobs | ref | i_jobs_createIndexed | i_jobs_createIndexed | 1 | const | 1 | |
+----+-------------+-------+------+----------------------+----------------------+---------+-------+------+-------+
1 row in set (0.01 sec)
mysql> explain select * from jobs where !createIndexed;
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key …
Run Code Online (Sandbox Code Playgroud) sql ×6
mysql ×4
sql-server ×3
t-sql ×2
data-storage ×1
database ×1
gis ×1
ieee-754 ×1
math ×1
nested-sets ×1
pg-search ×1
postgresql ×1
rounding ×1
tree ×1
xml ×1