1
sunchen 2017-04-30 16:15:26 +08:00
我的天,不能 order by 一下吗
|
2
iyaozhen 2017-04-30 16:24:40 +08:00 via Android
为什么要保证数据库里是顺序的?
|
3
chinvo 2017-04-30 16:26:51 +08:00
爬的时候把百度输出的 发帖 /回复 时间也爬了,然后按时间排序呗
|
4
bb2018 OP @sunchen insert into 数据库没法 order by 吧?
我是想实现这样的功能: 比如贴子时间分别是:2010 年 5 月 2011 年 5 月 2012 年 5 月 2013 年 5 月 2014 年 5 月 2015 年 5 月 的六个贴子。 现在用 scrapy 采集到 item 里入库 mysql 的时候。这个时间是混乱的。有可能 id 对应的时间是 2015 年的, 也有可能是 2013 年的。 而我想实现的功能是:id 1 对应的是最早的贴子 2010 年 5 月的 id 2 对应的次早的贴子 2011 年 5 月的 最大的 id 6 对应的是 2015 年的贴子,这样我调用出来的时候显示的才是最新的。 不知道这个是怎么排序的? 是入库前在 scrapy 的 item 里就排好了序? 还是在入库 mysql 的时候排? 还是都不行。只能在用代码调用数据的时候排数据? 而不管这个 id 是多少? |
5
tttty 2017-04-30 17:13:55 +08:00
插入排序
|
6
bb2018 OP @iyaozhen 因为如果那时间是混乱的。 第一条数据 id 1 可能对应的是最新的贴子,而最大的 id 也就是最后入库的那个贴子有可能是是几年前的最老的那个贴子。 这样很不好吧?
|
7
bb2018 OP @tttty 这样? INSERT INTO tbl_name (a1 , a2 , a3) VALUES (b1, b2, b3 ) order by b3 desc;
b3 是百度发贴的时间 这样吗? 好像不行。 |
8
CosimoZi 2017-04-30 17:18:31 +08:00
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。为什么要保证 id 是按顺序的。你加个发帖时间字段不行吗。
|
9
bb2018 OP @CosimoZi 加个发贴时间。那入库的时间就是新的发贴时间了。我是想保留原发贴时间。就用原发贴时间。最好原发贴时间与 id 对应。
|
10
em70 2017-04-30 17:25:47 +08:00 via Android
你直接说你的根本需求,大家帮你出主意。你的解决方案完全是无意义的,没有讨论价值
|
12
mozutaba 2017-04-30 18:51:06 +08:00
那你别用自增 id 呗。
|
14
bb2018 OP @em70
这样的需求。不知道这样描述,能表达清楚不: 我是想实现这样的功能: 比如贴子时间分别是:2010 年 5 月 2011 年 5 月 2012 年 5 月 2013 年 5 月 2014 年 5 月 2015 年 5 月 的六个贴子。 现在用 scrapy 采集到 item 里入库 mysql 的时候。这个时间是混乱的。有可能 id 对应的时间是 2015 年的, 也有可能是 2013 年的。 而我想实现的功能是:id 1 对应的是最早的贴子 2010 年 5 月的 id 2 对应的次早的贴子 2011 年 5 月的 最大的 id 6 对应的是 2015 年的贴子,这样我调用出来的时候显示的才是最新的。 不知道这个是怎么排序的? 是入库前在 scrapy 的 item 里就排好了序? 还是在入库 mysql 的时候排? 还是都不行。只能在用代码调用数据的时候排数据? 而不管这个 id 是多少? |
15
xjx0524 2017-04-30 19:58:49 +08:00
“加个发贴时间。那入库的时间就是新的发贴时间了。我是想保留原发贴时间。就用原发贴时间。最好原发贴时间与 id 对应。”
搞不懂你这前半句什么意思,既然能爬到发帖时间,就把这个时间存到一个字段里,需要 select 的时候按这个字段排序不就完了 |
16
gdtv 2017-04-30 20:25:22 +08:00
我明白楼主的意思,楼主采用的采集框架或者别人的采集代码把最后回复时间当成了帖子时间,这个很简单啊,自己想办法抓取到主帖的发帖时间就行了啊。
PS:我前不久也做了百度贴吧采集。 |
17
Famio 2017-04-30 20:28:32 +08:00
说真的,我也不会去关心入库的顺序,反正读的时候 order by
|
18
em70 2017-04-30 20:36:21 +08:00
@bb2018 有个名词叫时间戳,具体含义可以去百度下,你抓到的 2017-1-24 10:31 这样的时间数据都可以很方便的转换为一个唯一的时间戳数字,把这个数字保存到一个字段,查询时候用这个数字排序即可
|
19
wwqgtxx 2017-04-30 20:49:55 +08:00
为啥要管插入顺序,select 的时候排个序不就好了
至于时间,直接把网页上的时间转成时间戳保存进数据库不就行了 |
20
changwei 2017-05-01 00:48:47 +08:00 via Android
首先看到你的时间前面带 u,说明你时间还是 str 类型的,其次百度贴吧 tid 帖子号是时间递增的,直接用正则表达式分割出 url 里面 p 后面的数字,然后 order by 一下就可以,另外客户端接口可以直接抓取到时间戳
我的 github.com/cw1997,里面有几个贴吧相关的爬虫项目,php 的 py 的都有,你可以找找看。zhuanlan.zhihu.com/codes 近期也会发布相关文章,欢迎持续关注。 |
21
julyclyde 2017-05-01 07:30:52 +08:00
原作的根本问题在于,情感上不愿意接受:sql 数据库本身不提供顺序,顺序必须用一个字段的排序来描述,这个事实
“现在真是什么人都能写爬虫了” |
22
mcwanderer 2017-05-01 09:23:15 +08:00
我猜,楼主是处女座~
|
23
msg7086 2017-05-01 12:23:17 +08:00
你对数据的 id 有多执着?
你只是要显示的时候按照时间排序而已,这管 id 什么事?你直接进数据库把整个 id 列给砍了也不影响你的需求啊。 10 楼就是问你到底需求是什么,还在那拼命扯 id 的问题,你到底是要看帖子还是要看 id 啦? |
24
flyingghost 2017-05-02 11:04:39 +08:00
1,id 只唯一标识一条数据,除此之外什么作用都不应该有,包括顺序。改天换成 UUID,还怎么保证有序?
2,数据插入的顺序,不代表 select 出的顺序。要想有序,必须 order by。 3,原帖时间就应该是原帖时间,既不是回帖时间也不是抓取时间。如果不存在,请自己抓出、创建字段,并依此排序。 |