php如何自动读取第一个status为0的写法

2013-12-31 15:15:12 +08:00
 miao
我是php菜鸟 请问一个问题

我的mysql 设计举例如下

id name status
1 jack 1
2 kate 1
3 james 0
4 brown 0
5 Alston 0
6 Charles 1
7 Mark 0
8 Sarah 1


我一次只运行一下xxx.php

那么xxx.php 会自动读取 第一个 status=0 的id 和 name, 然后赋值status = 1

我第二次运行xxx.php 还是读取第一个 status=0 这个状态下的 id 和 name

每次xxx.php只读取一行 mysql数据

请问这个php和sql 怎么写?



PS:我不要循环读取
3762 次点击
所在节点    PHP
13 条回复
Sunyanzi
2013-12-31 15:26:56 +08:00
事实上我没能完全看懂你的提问 ... 我能看懂的部分是一个 MySQL 问题 ...

SELECT `id`,`name` FROM `tablename` WHERE `status`=0 ORDER BY `id` ASC LIMIT 0, 1

赋值 status = 1 我没明白 ... 不就是一条 UPDATE 语句么 ..?
likexian
2013-12-31 15:33:47 +08:00
update `table` set `status`=1 where status=0 limit 1
miao
2013-12-31 15:54:58 +08:00
@Sunyanzi 感谢您的回答, 我确实不知道如何形容这个超级简单的问题, 您这条sql语句应该能用,

后面 ORDER BY `id` ASC LIMIT 0, 1 这句话

意思是不是 按`id`的升序排序, LIMIT 0, 1 就是只读取一条数据?
miao
2013-12-31 15:56:02 +08:00
@likexian @likexian
谢谢, 赋值 status = 1 确实就是

update `table` set `status`=1 where status=0 limit 1

这句话就是只赋值第一个status=0?
66beta
2013-12-31 16:00:15 +08:00
这属于SQL问题,楼主可以翻手册慢慢做,自己搞出来的比较有趣
可以现在数据库GUI上跑一下,成功了再贴到PHP里面~
arbipher
2013-12-31 16:15:27 +08:00
把cursor保存下来,但是我不知道这个在PHP里面怎么实现。。。
我顺路问一下,PHP怎么实现全局变量(就像JSP里面Application范围的变量一样)
zzNucker
2013-12-31 17:27:51 +08:00
@arbipher 如果include了用global
arbipher
2013-12-31 17:59:48 +08:00
@zzNucker 不是global吧。我没理解错的话,php的globa范围l应该等效于jsp的request范围,php global变量只在这一次请求中有效,下一次请求的时候会重新初始化。
msg7086
2014-01-01 05:44:13 +08:00
@arbipher 因为以前PHP每次接受请求的时候都会产生一个新的php-cgi进程。既然每次都产生新进程了,那全局变量的生存周期当然只到脚本结束的时候就结束了。

要持久化,就得用第三方的东西。apc/mc/radis/mysql/cookie/session等等
arbipher
2014-01-01 09:47:32 +08:00
@msg7086 我去翻了下文档,可以用Semaphore。shm_get_var, shm_put_var。
http://www.php.net/manual/en/ref.sem.php
感觉这和读写数据库也没啥区别的。。。
msg7086
2014-01-01 09:53:43 +08:00
@arbipher 嗯?信号量?应该是用来Linux下跨进程通信的?

我觉得一般环境下还是用上面提的那些吧……
zzNucker
2014-01-01 22:43:08 +08:00
@arbipher 你这是啥 - - 是同步用的玩意吧, 一般你要跨request的话php确实难的,基本要靠用外部存储。。
arbipher
2014-01-01 23:01:06 +08:00
@zzNucker
这个问题我是在SAE上写PHP是遇到的。
我要在服务器初始化的时候,从数据库读些东西放到memcache里面。函数是memcache_set($mmc,"foo","bar")。
为了防止memcache的数据被洗掉,任何一个请求,只要memcache_get失败,就去数据库里面读一次,把结果存到memcache里。
问题是我担心,这个“读数据库存到memcache”的操作不是原子的。当时就在想全局锁的事情。

LZ这个帖子让我想到了这件事情。所以我的潜意识里,开始解答我自己的疑惑了。

其实我也不知道,这个操作是不是一定要原子。可能是我想多了吧。
至于LZ这个问题,利用mysql,或者Semaphore都能解决吧,绕了一下而已。
但是PHP下,服务器级别的全局变量的最直接的方法,我还是不知道。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/95179

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX