八达网

标题: 万能的8达啊 PHP+MYSQL达人进 [打印本页]

作者: 山上下来的    时间: 2007-11-2 14:58
标题: 万能的8达啊 PHP+MYSQL达人进
我在整一网站 新手 对PHP代码几乎一窍不通 更别说JS了


问题如下:
有个表A的主键由几个字母+数字组成
字母部分由另一表B的某栏内的内容控制
A的字母部分可相同 数字想要实现在前面字母相同的情况下实现自动编号
我现在要做一个插入数据的页面
该用什么办法呢 怎么实现这个自动编号呢?
作者: KoMoS    时间: 2007-11-2 15:03
select count(*) from A where   prikey like ....

根据返回值  再格式化一个字符串做主键传进去
作者: 百鬼夜行    时间: 2007-11-2 15:06
是字母相同的进行自动编号 还是整个自动编号?
作者: 山上下来的    时间: 2007-11-2 15:07
字母相同的进行自动编号
作者: 百鬼夜行    时间: 2007-11-2 15:08
原帖由 KoMoS 于 2007-11-2 15:03 发表
select count(*) from A where   prikey like ....

根据返回值  再格式化一个字符串做主键传进去

正解
作者: TM_MaRine_Z    时间: 2007-11-2 15:09
国内用MySQL少吧?都是SQLServer
作者: clm123    时间: 2007-11-2 15:10

作者: 山上下来的    时间: 2007-11-2 15:16
原帖由 KoMoS 于 2007-11-2 15:03 发表
select count(*) from A where   prikey like ....

根据返回值  再格式化一个字符串做主键传进去


这句取出的是什么值啊?我很菜 别骂我




比如A表某值是“ABC 004”其他还有“BBC” “BCC”什么的 字母是另一表B内某栏的数据
那我要插入一数据主键为“ABC 005”
我要先从B读出 “ABC” 然后后面的“005”要怎么自动编号
直接由SQL语句能实现吗?还是要在页面里用PHP实现?
能用文字说说思路吗先。。。。。
作者: 山上下来的    时间: 2007-11-2 15:20
还有市面上基本买不到网站PHP+MYSQL的书
我只买了本DW 里面全讲页面制作的  所有动态动作全部由DW功能实现 不行的还都上插件
功能是强大  可以要想自由实现点什么功能时 就云里雾里了
不看语言还是不行啊。。。。。


能推荐什么好的PHP入门方法吗?
作者: 百鬼夜行    时间: 2007-11-2 15:26
返回值是有ABC字段的个数
之后就去组合吧。
作者: KoMoS    时间: 2007-11-2 15:36
你看看sql 的语法        Like ‘ABC%’

LS也说了      返回值是和ABC类似的数据的个数   然后++      就是自增了

我不懂php     不过去书店看到过 墨绿色的一本 PHP+MYSQL5.0 什么的
作者: syp    时间: 2007-11-2 15:38
高手啊
作者: 山上下来的    时间: 2007-11-2 15:42
谢谢各位
哎 我想做美工的
阴错阳差做的。。。。。
作者: KoMoS    时间: 2007-11-2 15:43
想到个问题  你字符串格式不固定的话会有问题吧      你试下      如果有两个字段如下: ABC004   

   ABCC004   

   ABCC那个不是你要的结果  也会被选中
作者: 山上下来的    时间: 2007-11-2 15:46
表B输入字母时控制在3个字符 应该不会有问题
谢谢 不过“ABC004” +1 会不会变成 “ABC5”?
作者: anomaly    时间: 2007-11-2 15:47
楼主这种表格在数据库设计里面属于典型的失败设计

想当然的以为把两个栏目(字母+数字)直接并起来可以加快速度是门外汉的想法
作者: 百鬼夜行    时间: 2007-11-2 15:54
原帖由 山上下来的 于 2007-11-2 15:46 发表
表B输入字母时控制在3个字符 应该不会有问题
谢谢 不过“ABC004” +1 会不会变成 “ABC5”?

ABC001
ABC002
ABC003
ABC004

select以后是 4
不是ABC004
判断一下这个数有几位
前面补几个0再把字母加上
作者: 山上下来的    时间: 2007-11-2 15:54
原帖由 anomaly 于 2007-11-2 15:47 发表
楼主这种表格在数据库设计里面属于典型的失败设计

想当然的以为把两个栏目(字母+数字)直接并起来可以加快速度是门外汉的想法

这数据库不是我设计的 要我是不会这么划的
我是接一个烂摊子在做
但是要重新自己来搞 第一怕麻烦 第二我也菜
作者: KoMoS    时间: 2007-11-2 16:01
php 也支持 sprinft(buff, "ABC%03d",  返回值+1)
作者: anomaly    时间: 2007-11-2 16:07
那个 count(*) , 如果你的编号不一定是连续的, 比如中间有删除过, 就不对了
保险点用 select primary_key from table where  primary_key like "abc%" order by primary_key desc ( 如果数字位数相同 )
作者: 山上下来的    时间: 2007-11-2 16:22
头大啊。。。。。
作者: [Y.H]zmy    时间: 2007-11-2 16:26
O'reilly 出版
<PHP&MySQL Web 数据库应用>   69 元

[ 本帖最后由 [Y.H]zmy 于 2007-11-2 16:30 编辑 ]
作者: aaafffei    时间: 2007-11-2 16:36
我补充下,如果是要排序,还应该这样:

比如需要对字段“name”中使用字母ABC的排序,就是

select count(*) from A where   prikey like "ABC" order by name (desc)…………desc可选填。
作者: fer    时间: 2007-11-2 16:37
$str = 'abc';//可以修改成你需要排列的前缀。
$strlen = strlen( $str );
$sql = "select SUBSTRING(`columns`, ( $strlen + 1 ) ) + 1 from `table` where SUBSTRING(`columns`, 1, $strlen ) = '$str'";

应该这样可以了!
不过数据量大的话,速度就。。。  最好有一个辅助表来记录最大值。
设计表的人确实非常strong!
作者: StartNow    时间: 2007-11-2 16:44
LZ 下载一个PHP手册看下吧.

另外这个表的结构设计很失败,   字母和数据不要混在一个字段里面.
作者: StartNow    时间: 2007-11-2 16:49
自动递增 可以设ID 字段的 auto_increment

或每次插入前读取前一个ID 然后+1

一般处理都使用第一种方法.
作者: u2-bono    时间: 2007-11-2 16:51
很好很强大




欢迎光临 八达网 (https://www.8-da.com/) Powered by Discuz! X2.5