佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

搜索
查看: 981|回复: 10

[PHP5]Tagging

[复制链接]
发表于 27-8-2007 06:35 PM | 显示全部楼层 |阅读模式
如果要做一个tagging 的系统,如果是你如何做呢?

比如说我写完一篇文章,然后要tag这篇文章(web2.0那个tagging)

然后每个tag用comma来区隔

因为tag cloud只会越来越大,所以大概不能够用一个list显示所有的tag出来给人家选,而只能够让他们用textbox来输入

嗯……问题来了,当我要把tags丢进database,一定有一些tag我的database已经有了,也一定有一些是我没有的,所以没有的要丢进去
有什么比较妥善的方式来把我的tag以最快的方式(最少的query)丢进database里面呢?

我想到的只有一个一个tag去search,然后如果找无资料才一个一个丢进去(我把所有的tag丢进一个table里面)

明白我说什么吗?
回复

使用道具 举报


ADVERTISEMENT

发表于 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了
回复

使用道具 举报

Follow Us
 楼主| 发表于 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..
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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

  1. >START TRANSACTION

  2. >STATEMENT 1

  3. >STATEMENT 2

  4. >STATEMENT 3

  5. >COMMIT
复制代码


如果其中一个fail,全部不会commit,你可以ROLLBACK,然后就能当作什么事情都没发生过

以下是我通常的做法
  1. function a() {

  2.     $db->query("start transaction");

  3.     if ($db->query("statement 1") === false) {

  4.        return false;

  5.     }

  6.     if ($db->query("statement 2") === false) {


  7.        return false;


  8.     }

  9.     if ($db->query("statement 3") === false) {


  10.        return false;


  11.     }

  12.     $db->query("commit");

  13.     return true;

  14. }
复制代码
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2026 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 28-3-2026 09:08 AM , Processed in 0.090616 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表