|
查看: 981|回复: 10
|
[PHP5]Tagging
[复制链接]
|
|
|
如果要做一个tagging 的系统,如果是你如何做呢?
比如说我写完一篇文章,然后要tag这篇文章(web2.0那个tagging)
然后每个tag用comma来区隔
因为tag cloud只会越来越大,所以大概不能够用一个list显示所有的tag出来给人家选,而只能够让他们用textbox来输入
嗯……问题来了,当我要把tags丢进database,一定有一些tag我的database已经有了,也一定有一些是我没有的,所以没有的要丢进去
有什么比较妥善的方式来把我的tag以最快的方式(最少的query)丢进database里面呢?
我想到的只有一个一个tag去search,然后如果找无资料才一个一个丢进去(我把所有的tag丢进一个table里面)
明白我说什么吗? |
|
|
|
|
|
|
|
|
|
|
发表于 27-8-2007 07:21 PM
|
显示全部楼层
回复 #1 V4ndrake 的帖子
那么麻烦你说出你的tag table是怎么设计的?
还有你所谓的 "一个一个tag去search",是针对某张article的tag去search,还是整个entire tag of tag table? ...  |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 28-8-2007 10:11 PM
|
显示全部楼层
我的tag table
Tags (ID, tagname)
就是说人家在可以打tag的那个textbox打一大堆tags,然后如果我的tag table没有里面的其中一些tags的话,我要加进去那个table |
|
|
|
|
|
|
|
|
|
|
发表于 1-9-2007 02:59 PM
|
显示全部楼层
原帖由 V4ndrake 于 28-8-2007 10:11 PM 发表 
我的tag table
Tags (ID, tagname)
就是说人家在可以打tag的那个textbox打一大堆tags,然后如果我的tag table没有里面的其中一些tags的话,我要加进去那个table
set tagname to UNIQUE
所以insert 同个tagname就会fail,代表tag已经存在,如果success代表不存在,这个步骤一个query就够 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 2-9-2007 01:38 AM
|
显示全部楼层
原帖由 白雞飯 于 1-9-2007 02:59 PM 发表 
set tagname to UNIQUE
所以insert 同个tagname就会fail,代表tag已经存在,如果success代表不存在,这个步骤一个query就够
谢谢
那么如果是一大串的insert statements,如果其中一个failed了,接下来还是会走的对不对呢?mysql会不会return error message的? |
|
|
|
|
|
|
|
|
|
|
发表于 2-9-2007 09:57 AM
|
显示全部楼层
回复 #5 V4ndrake 的帖子
那就要看你怎样handle errors了
如果你用
If INSERT ERROR
Die / Exit
当然不能接下去跑了
If INSERT ERROR
Do Nothing
就可以接下去跑下面的Statements了 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 2-9-2007 04:15 PM
|
显示全部楼层
原帖由 Aoiro 于 2-9-2007 09:57 AM 发表 
那就要看你怎样handle errors了
如果你用
If INSERT ERROR
Die / Exit
当然不能接下去跑了
If INSERT ERROR
Do Nothing
就可以接下去跑下面的Statements了
这个是SQL的语法吗??
但愿MySQL5可以玩到这么advanced |
|
|
|
|
|
|
|
|
|
|
发表于 2-9-2007 11:48 PM
|
显示全部楼层
回复 #7 V4ndrake 的帖子
|
pseudocode 而已...不是php/mysql statements.. |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 3-9-2007 09:45 PM
|
显示全部楼层
原帖由 Aoiro 于 2-9-2007 11:48 PM 发表 
pseudocode 而已...不是php/mysql statements..
谢谢啦,感激不尽
我们刚决定所有的SQL全部从MySQL Server那边透过stored procedure做,所以大概这段期间也要去温习sp的syntax了,嘿嘿。 |
|
|
|
|
|
|
|
|
|
|
发表于 3-9-2007 11:52 PM
|
显示全部楼层
原帖由 V4ndrake 于 2-9-2007 01:38 AM 发表 
谢谢
那么如果是一大串的insert statements,如果其中一个failed了,接下来还是会走的对不对呢?mysql会不会return error message的?
你用myisam or innodb?
innodb support transaction
- >START TRANSACTION
- >STATEMENT 1
- >STATEMENT 2
- >STATEMENT 3
- >COMMIT
复制代码
如果其中一个fail,全部不会commit,你可以ROLLBACK,然后就能当作什么事情都没发生过
以下是我通常的做法
- function a() {
- $db->query("start transaction");
- if ($db->query("statement 1") === false) {
- return false;
- }
- if ($db->query("statement 2") === false) {
- return false;
- }
- if ($db->query("statement 3") === false) {
- return false;
- }
- $db->query("commit");
- return true;
- }
复制代码 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 4-9-2007 03:30 PM
|
显示全部楼层
原帖由 白雞飯 于 3-9-2007 11:52 PM 发表 
你用myisam or innodb?
innodb support transaction
>START TRANSACTION
>STATEMENT 1
>STATEMENT 2
>STATEMENT 3
>COMMIT
如果其中一个fail,全部不会commit,你可以ROLLBACK,然后就 ...
可是这里的scenario是就算failed(就是说那个tag已经存在了)了也要照样commit |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|