mysql 查询_mysql高级查询

2011-05-30 回答

SELECT info FROM list where uid=1 AND info=infox order by id desc limit 5

mysql没有x这样的通配符,改成:

SELECT info FROM list where uid=1 AND info LIKE 'info%' order by id desc limit 0,5

补充:

如果所有值都是 infox 这样的格式的,也可以通过正则来做

SELECT info FROM list where uid=1 AND info REGEXP '^info.$' order by id desc limit 0,5

追问:

我写的太特殊了。看看这个你就知道了。我写的是个ip统计系统,目的就是首先把访客的ip地址和数据表里的最近(也就是最后的5条记录里的ipaddress字段,我在图中用info字段代替了ipaddress)做对比。uid是为了区分同页面。这个你因该知道我的意思了吧,可是现在的这段代码实现不了,总是echo"不存在该字符";并且是循环的输出的3个相同的。

header("Content-type:text/html;charset=UTF-8");//设置页面编码

$uid=$_GET['uid'];

$getip=$_SERVER[REMOTE_ADDR];//获得客户端ip地址

$con=mysql_connect("123.23.22.35","user","ps12345");

mysql_select_db("logo",$con);

mysql_query("set character set 'utf8'");//读库

$panduan="SELECT ipaddress FROM ip where uid='$uid' order by id desc limit 5";

$q=mysql_query($panduan);

while($rows = mysql_fetch_row($q)){

if ($rows['ipaddress'] == '$getip'){

echo"存在";

break;

}

else{

echo "不存在该字符";

}

}

?>

追答:

$q=mysql_query($panduan);

改成

$q=mysql_query($panduan,$con);

指名使用哪个链接

追问:

链接标识符不是可以 省略吗,省略之后不是默认是最后一个查询语句吗,再说了就算是不存在该记录也不能让他循环输出啊。

追答:

$panduan="SELECT ipaddress FROM ip where uid='$uid' order by id desc limit 5";

你先将$panduan这个变量echo一下,吧输出的字符串拷贝到Mysql里面执行,看是否能查询到

追问:

有结果的。可以查询的。

追答:

刚看到了,你的 mysql_fetch_row 改成 mysql_fetch_array 就可以了

mysql_fetch_row 返回的数组是数值索引的,你要用字符索引用 mysql_fetch_array

补充:

为加快速度,你可以设置

mysql_fetch_array($q, MYSQL_ASSOC) 指明返回关联数组,省略第二个参数默认是 MYSQL_BOTH,返回关联数组和数字数组

追问:

d309c6299a20eaea1028191113d50749.png

我就这么给你说吧,我现在用的是uid=100 我现在的的ip地址是113.108.91.91(对应着id=3的那个记录),我怎么判断uid=100的最近5条记录里是否包含113.108.91.91  这个我说的应该够明白了吧。

追问:

这样还是实现不了啊,我感觉没有这么复杂啊

追答:

刚才的就可以实现了阿,其他不变,while循环改成

$ip_exists = false;

while($rows = mysql_fetch_array($q)) {    if ($rows['ipaddress'] == '$getip') {

$ip_exists = true;    break;

}}

if ($ip_exists == false) {

echo "不存在该字符";}

追问:

header("Content-type:text/html;charset=UTF-8");//设置页面编码

$uid=$_GET['uid'];

$getip=$_SERVER[REMOTE_ADDR];//获得客户端ip地址

$con=mysql_connect("123.23.22.35","user","ps12345");

mysql_select_db("logo",$con);

mysql_query("set character set 'utf8'");//读库

$panduan="SELECT ipaddress FROM ip where uid='$uid' order by id desc limit 3";

$q=mysql_query($panduan,$con);

$ip_exists = false;

while($rows = mysql_fetch_array($q,MYSQL_ASSOC)) {

if ($rows['ipaddress'] == '$getip') {

$ip_exists = true;

break;

}

}

if ($ip_exists == false) {

echo "不存在该字符";}

?>

我是这样做的,但是还是不行,这回输出的是  不存在该字符,但是明明uid=100的最后5条记录里包含我现在的ip啊

追答:

你在while里面if之前 添加 echo $rows['ipaddress']." / ".$getip."
";

看值是否正确

追问:

首先说明我在本地测试,所以我现在的ip地址是127.0.0.1我表里现在的最后一条记录就是uid=100的,且ip为127.0.0.1

刚才我有试了了还是这个结果。

127.0.0.1 / 127.0.0.1

127.0.0.1 / 127.0.0.1

不存在该字符

追问:

貌似左右的值不具可比性?数据表里的是字符串型的。vchar

追答:

if ($rows['ipaddress'] == '$getip') {

这行 '$getip' 去掉单引号

追问:

成功了,这次!

追答:

php操作mysql我不建议直接使用php的内置mysql函数,建议使用Adodb或者pdo,这2个都是高性能的抽象类库,他们都支持事务处理,支持事务处理,功能强大

追问:

恩,谢谢了,帮我解决了头疼的问题,我刚学的php,以后会多多了解的,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值