解决当distinct和join同时存在distinct失效问题

 更新时间:2016年11月25日 16:38  点击:1265

$sql = 'select distinct(ontopid),gb.id as id,f.id as fid,g.id as gid,g.*,gb.*,f.* from pk_groupbuy gb

        left join pk_ontop as o on o.ontopid=gb.id

        left join pk_goods g on gb.goodsid=g.id and g.status=2 and g.invalid>UNIX_TIMESTAMP()

        left join pk_fastgroupbuy f on gb.fastgroupbuyid=f.id

        where gb.id in ('.$arr_str.') and (gb.status="2" or gb.status="3")

        and gb.endtime>UNIX_TIMESTAMP() and gb.starttime<UNIX_TIMESTAMP()

        group by onid limit $start,$num";

return TableSystem::query($sql);

变量说明:$arr_str是一个由pk_groupbuy中主键 id组成的一个数组,经过explode函数得到的字符串,

          $start,$num分别是查询的开始记录数,和要查询的记录数。

问题说明:pk_ontop表中ontopid在不能记录中有重复现象

比如:我只需要查询出来pk_ontop中当天置顶的ontopid,即商品id,不需要其他的商品信息,查询出来的有ontopid就算有重复现象,这时我可以通过去除数组重复元素解决问题,但是如果我要查询出相应商品id并查询其他相关联表中的信息,并按照ontop表中starttime,status,paixu字段进行排序等操作时,就需要join pk_ontop表,所以之前解决的重复问题就又会出现,无法处理,特别是在api中,是不允许出现重复的,这要怎么办呢?我也不会额,别人教我这样弄,请大家参考下:

 

    $sql = 'SELECT DISTINCT(ontopid),starttime,paixu FROM pk_ontop ORDER BY starttime DESC,STATUS ASC,paixu ASC LIMIT 17';
    $arr = TableSystem::query($sql);
    foreach($arr as $key=>$val){
     $topids[$key] = $val['ontopid'];
    }
    $arr_str = implode(',',$topids);
    $arr1 = TableSystem::query($sql);

    $sql = 'select gb.local,f.phone,f.shopname as fshopname,gb.maxnum,gb.intro,gb.buynum,g.pic,f.googleaddress,gb.goodsclassid,gb.sellerid,f.img,gb.province,gb.city,gb.id,gb.title,g.pic,gb.starttime,
      gb.endtime,gb.price,gb.goodsprice from pk_groupbuy gb
      left join  pk_goods g on gb.goodsid=g.id and g.status=2 and g.invalid > UNIX_TIMESTAMP()
      left JOIN  pk_fastgroupbuy f ON f.id=gb.fastgroupbuyid
      where (gb.status="2" or gb.status="3") and gb.endtime > UNIX_TIMESTAMP()
      and gb.starttime < UNIX_TIMESTAMP()  AND gb.id in ('.$arr_str.')';
   
    $arr2 = TableSystem::query($sql);
    foreach($arr2 as $key=>$val){
     $local[$val['id']] = $val['local'];
     $phone[$val['id']] = $val['phone'];
     $fshopname[$val['id']] = $val['fshopname'];
     $maxnum[$val['id']] = $val['maxnum'];
     $intro[$val['id']] = $val['intro'];
     $buynums[$val['id']] = $val['buynum'];
     $fgoogleaddresss[$val['id']] = $val['googleaddress'];
     $goodsclassid[$val['id']] = $val['goodsclassid'];
     $sellids[$val['id']] = $val['sellerid'];
     $provices[$val['id']] = $val['province'];
     $citys[$val['id']] = $val['city'];
     $titles[$val['id']]= $val['title'];
     $pics[$val['id']] = $val['pic'] ? $val['pic'] : $val['img'];
     $starttimes[$val['id']] = $val['starttime'];
     $endtimes[$val['id']] = $val['endtime'];
     $prices[$val['id']] = $val['price'];
     $goodsprices[$val['id']] = $val['goodsprice'];
    }
    unset($arr2);
    foreach($arr1 as $key=>$val){
     $list[$key]['id'] = $val['ontopid'];
     $list[$key]['province'] = $provices[$val['ontopid']];
     $list[$key]['city'] = $citys[$val['ontopid']];
     $list[$key]['title'] = $titles[$val['ontopid']];
     $list[$key]['pic'] = $pics[$val['ontopid']];
     $list[$key]['starttime'] = $starttimes[$val['ontopid']];
     $list[$key]['endtime'] = $endtimes[$val['ontopid']];
     $list[$key]['price'] = $prices[$val['ontopid']];
     $list[$key]['goodsprice'] = $goodsprices[$val['ontopid']];
     $list[$key]['sellerid'] = $sellids[$val['ontopid']];
     $list[$key]['fgoogleaddress'] = $fgoogleaddresss[$val['ontopid']];
     $list[$key]['goodsclassid'] = $goodsclassid[$val['ontopid']];
     $list[$key]['buynum'] = $buynums[$val['ontopid']];
     $list[$key]['intro'] = $intro[$val['ontopid']];
     $list[$key]['maxnum'] = $maxnum[$val['ontopid']];
     $list[$key]['fshopname'] = $fshopname[$val['ontopid']];
     $list[$key]['fphone'] = $phone[$val['ontopid']];
     $list[$key]['local'] = $local[$val['ontopid']];
    }
    return $list;

 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- 数据库教程: `mysql教程new`
--

-- --------------------------------------------------------

--
-- 表的结构 `test`
--

CREATE TABLE IF NOT EXISTS `test` (
  `id` int(10) NOT NULL auto_increment,
  `websitename` varchar(200) character set utf8 NOT NULL,
  `websiteurl` varchar(200) character set utf8 NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

--
-- 导出表中的数据 `test`
--

INSERT INTO `test` (`id`, `websitename`, `websiteurl`) VALUES
(1, '百度', 'http://www.baidu.com'),
(5, 'google', 'http://www.google.com'),
(4, '400电话', 'http://www.111cn.net'),
(6, '搜狗', 'www.sogou.com'),
(7, '必应', 'http://www.111cn.net');

php教程 文件代码

<?php


function xlsBOF() {
    echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
    return;
}

function xlsEOF() {
    echo pack("ss", 0x0A, 0x00);
    return;
}

function xlsWriteNumber($Row, $Col, $Value) {
    echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
    echo pack("d", $Value);
    return;
}

function xlsWriteLabel($Row, $Col, $Value ) {
    $L = strlen($Value);
    echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
    echo $Value;
    return;
}

/**
 *添加头部信息
 * @param <type> $rsRec
 */
function addheader($rsRec) {
    $fieldLen = mysql_num_fields($rsRec);
    xlsBOF();
    $iCell = 0;
    for($i=0;$i<$fieldLen;$i++) {
        $fieldname = mysql_field_name($rsRec, $i);
        xlsWriteLabel(0,$iCell++, iconv("utf-8", "gb2312", $fieldname));
    }


}

/**
 *添加记录信息
 * @param <type> $rsRec
 */
function addData($rsRec) {
    $xlsRow=1;
    $fieldLen = mysql_num_fields($rsRec);
    while($rsone=mysql_fetch_object($rsRec)) {
        $iCell = 0;
        for($i=0;$i<$fieldLen;$i++) {
            $fieldname = mysql_field_name($rsRec, $i);
            $fieldnameValue = $rsone->$fieldname;
            xlsWriteLabel($xlsRow,$iCell++,iconv("utf-8", "gb2312", $fieldnameValue));
        }

        $xlsRow++;
    }
    xlsEOF();
    exit;
}

if(isset($_POST["tableName"])) {

    $con = mysql_connect("localhost", "root", "vertrigo");

    $result=mysql_db_query("mysqlnew","select * from ".$_POST["tableName"]);

// 文件头
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Content-Disposition: attachment;filename=test.xls ");
    header("Content-Transfer-Encoding: binary ");

// 向表中添加数据
    addheader($result) ;
    addData($result) ;

    mysql_close($con);

}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>excel信息导出</title>
    </head>
    <body>
        <div>
            <form name="form1" method="post" action="" onSubmit="">
                <input type="text" name="tableName" value="" />
                <br>
               
                <input class="ccc" name="" type="submit" value="提交" />
            </form>
        </div>
    </body>
</html>

运行画面

生成excel文件内容

id websitename websiteurl    
1 百度 http://www.baidu.com  
5 google http://www.google.com  
4 400电话 http://www..111cn.net  
6 搜狗 www.sogou.com    
7 必应 http://www.111cn.net

今天把在php教程开发中常用到的数据库教程操作方法函数总结分析一下了,希望有兴趣的朋友可以参考一下。
一、数据库操作
1. 连接MYSQL数据
mysql教程_connect()

提示和注释
注释:脚本一结束,到服务器的连接就被关闭,除非之前已经明确调用 mysql_close() 关闭了。
提示:要创建一个持久连接,请使用 mysql_pconnect() 函数。
例子

<?php
$con = mysql_connect("localhost","mysql_user","mysql_pwd");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

// 一些代码...

mysql_close($con);
?>

e.g.

$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or die(‘ www.111cn.net Unable to connect, please check connection paremeters’);


 2. 选择数据库
mysql_select_db()
连接上数据库后,PHP默认选择的数据库未必是我们后面操作中需要的数据库,为确保数据库选择正确,一般在数据库连接语句后面还要加上数据库选择语句。

mysql_select_db() 函数设置活动的 MySQL 数据库。
如果成功,则该函数返回 true。如果失败,则返回 false。
语法
mysql_select_db(database,connection)
参数 描述
database 必需。规定要选择的数据库。
connection 可选。规定 MySQL 连接。如果未指定,则使用上一个连接。

e.g.
mysql_select_db(MYSQL_DB, $db) or die(mysql_error($db));
3. 执行SQL语句
mysql_query()
该函数将SQL语句发送到当前活动的数据库并执行语句,返回结果。

定义和用法
mysql_query() 函数执行一条 MySQL 查询。
语法
mysql_query(query,connection)
参数 描述
query 必需。规定要发送的 SQL 查询。注释:查询字符串不应以分号结束。
connection 可选。规定 SQL 连接标识符。如果未规定,则使用上一个打开的连接。
说明
如果没有打开的连接,本函数会尝试无参数调用 mysql_connect() 函数来建立一个连接并使用之。
返回值
mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。
对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。
非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。很有可能一条查询执行成功了但并未影响到或并未返回任何行。

e.g.

$query = “SELECT * FROM $table”
$result = mysql_query($query, $db) or die(mysql_error($db));


4. 关闭数据库
mysql_close()
该函数用于关闭不需要继续活跃的数据库,但该方法不是必须的,一般PHP会自动关闭不继续活跃的数据库。
e.g.
mysql_close($db);
5. 释放SQL结果
mysql_free_result()
该函数用于释放mysql_query()执行结果占用的内存,该函数很少被调用,除非result很大,占用太多内存;一般在PHP脚本执行结束之后很自动释放占用的内存。
e.g
ysql_free_result() 函数释放结果内存。
如果成功,则返回 true,如果失败,则返回 false。
语法
mysql_free_result(data)
参数 描述
data 必需。要释放的结果标识符。该结果标识符是从 mysql_query() 返回的结果。
提示和注释
注释:mysql_free_result() 仅需要在考虑到返回很大的结果集时会占用多少内存时调用。在脚本结束后所有关联的内存都会被自动释放。
例子

<?php
$con = mysql_connect("localhost", "peter", "abc123");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

$db_selected = mysql_select_db("test_db",$con);

$sql = "SELECT * from Person";
$result = mysql_query($sql,$con);
print_r(mysql_fetch_row($result));

// 释放内存

 

mysql_free_result($result);

$sql = "SELECT * from Customers";
$result = mysql_query($sql,$con);
print_r(mysql_fetch_row($result));

mysql_close($con);
?>

二、SQL执行结果操作
1. 返回执行结果中的一行
mysql_fetch_row()
返回执行结果的当前行的数值数组,执行这个函数后,结果指向下一行。
e.g.
$row = mysql_fetch_row($result);
处理执行结果一般放在while循环中,遍历每一行
e.g.
while($row = mysql_fetch_row($result))
{……}
2. mysql_fetch_row()的替代方法
mysql_fetch_array()
mysql_fetch_assoc()
mysql_fetch_array()返回键值对数组,键为查询的table的列名;
mysql_fetch_assoc()返回结果时可以先排序(如果为可选参数赋值),相当于mysql_fetch_array()+MYSQL_ASSOC
3. 执行结果的字段(列)属性
mysql_fetch_field()
eg.
mysql_fetch_field() 函数从结果集中取得列信息并作为对象返回。
mysql_fetch_field() 可以用来从查询结果中取得字段的信息。如果没有指定字段偏移量,则提取下一个尚未被 mysql_fetch_field() 取得的字段。
该函数返回一个包含字段信息的对象。
被返回的对象的属性为:
name - 列名
table - 该列所在的表名
max_length - 该列最大长度
not_null - 1,如果该列不能为 NULL
primary_key - 1,如果该列是 primary key
unique_key - 1,如果该列是 unique key
multiple_key - 1,如果该列是 non-unique key
numeric - 1,如果该列是 numeric
blob - 1,如果该列是 BLOB
type - 该列的类型
unsigned - 1,如果该列是无符号数
zerofill - 1,如果该列是 zero-filled
语法
mysql_fetch_field(data,field_offset)
参数 描述
data 必需。要使用的数据指针。该数据指针是从 mysql_query() 返回的结果。
field_offset 必需。规定从哪个字段开始。0 指示第一个字段。如果未设置,则取回下一个字段。
提示和注释
注释:本函数返回的字段名是区分大小写的。
例子

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

$db_selected = mysql_select_db("test_db",$con);

$sql = "SELECT * from Person";
$result = mysql_query($sql,$con);

while ($property = mysql_fetch_field($result))
  {
  echo "Field name: " . $property->name . "<br />";
  echo "Table name: " . $property->table . "<br />";
  echo "Default value: " . $property->def . "<br />";
  echo "Max length: " . $property->max_length . "<br />";
  echo "Not NULL: " . $property->not_null . "<br />";
  echo "Primary Key: " . $property->primary_key . "<br />";
  echo "Unique Key: " . $property->unique_key . "<br />";
  echo "Mutliple Key: " . $property->multiple_key . "<br />";
  echo "Numeric Field: " . $property->numeric . "<br />";
  echo "BLOB: " . $property->blob . "<br />";
  echo "Field Type: " . $property->type . "<br />";
  echo "Unsigned: " . $property->unsigned . "<br />";
  echo "Zero-filled: " . $property->zerofill . "<br /><br />";
  }

mysql_close($con);
?>

4. 查询数据库中的表名
我们要显示所有的表就会用到mysql_list_tables用法语法来操作,
mysql_list_tables 语法

mysql_list_tables()
e.g.
$db_name = MYSQL_DB;
$result = mysql_list_tables($db_name);
echo “数据库中包含如下表:”;
while ($row = mysql_fetch_row($result))
{
echo $row[0];
}


5. 查询数据库的列名(字段名)

esource mysql_list_fields ( string database_name, string table_name [, resource link_identifier] )

mysql_list_fields() 取得给定表名的信息。参数是数据库名和表名。返回一个结果指针,可以用于 mysql_field_flags(),mysql_field_len(),mysql_field_name() 和 mysql_field_ty

mysql_list_fields()
e.g.
$fields = mysql_list_fields($db_name,$table);
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++)
echo  mysql_field_name($fields, $i);


三、其他函数
1. mysql_num_rows()

mysql_num_rows() 函数返回结果集中行的数目。
语法
mysql_num_rows(data)
参数 描述
data 必需。结果集。该结果集从 mysql_query() 的调用中得到。
说明
mysql_num_rows() 返回结果集中行的数目。此命令仅对 SELECT 语句有效。要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的行的数目,用 mysql_affected_rows()。
返回执行结果的行数。
e.g.

$num = mysql_num_rows($result);


2. mysql_num_fields()
返回执行结果的列数(字段数)。
e.g. $num = mysql_num_fields($result);
3.mysql_set_charset()
设置执行结果的编码,防止在网页中显示中文时乱码。
e.g.

$query = “select * from $table_name”;
mysql_query(‘set names utf8′);
$result = mysql_query($query, $db) or die(mysql_error($db));


注:
1. 文中大写代码为预定义的内容,如define(MYSQL_HOST,  ‘localhost’);

sql update记录更新详细实例

语法:

[ WITH <common_table_expression> [...n] ]
UPDATE
    [ TOP (expression) [ PERCENT ] ]
    { { table_alias | <object> | rowset_function_limited
         [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
      }
      | @table_variable   
    }
    SET
        { column_name= { expression | DEFAULT | NULL }
          | { udt_column_name.{ { property_name= expression
                                | field_name=expression }
                                | method_name(argument [ ,...n ] )
                              }
            }
          | column_name { .WRITE (expression,@Offset,@Length) }
          | @variable=expression
          | @variable= column=expression
          | column_name { += | -= | *= | /= | %= | &= | ^= | |= } expression
          | @variable { += | -= | *= | /= | %= | &= | ^= | |= } expression
          | @variable=column { += | -= | *= | /= | %= | &= | ^= | |= } expression
        } [ ,...n ]

    [ <OUTPUT Clause> ]
    [ FROM { <table_source> } [ ,...n ] ]
    [ WHERE { <search_condition>
            | { [ CURRENT OF
                  { { [ GLOBAL ] cursor_name }
                      | cursor_variable_name
                  }
                ]
              }
            }
    ]
    [ OPTION ( <query_hint> [ ,...n ] ) ]
[ ; ]

<object> ::=
{
    [ server_name . database_name . schema_name .
    | database_name .[ schema_name ] .
    | schema_name .
    ]
    table_or_view_name}

实例 php教程

<?php
   mysql教程_connect("mysql153.secureserver.net","java2s","password");
   mysql_select_db("java2s");

   $query = "UPDATE Employee SET salary = '39.99' ";
   $result = mysql_query($query);
   echo "There were ".mysql_affected_rows()." product(s) affected. ";

?>


利用update 更新数据

<?php

   mysql_connect("mysql153.secureserver.net","java2s","password");
   mysql_select_db("java2s");

   $rowID = "0001";
   $name = "Kate";
   $price = "12";

      $query = "UPDATE Employee SET name='$name', price='$price' WHERE ID='$rowID'";
      $result = mysql_query($query);

      if ($result)
         echo "<p>The developer has been successfully updated.</p>";
      else
         echo "<p>There was a problem updating the developer.</p>";

 

?>

  下面我们用Mysql数据库教程来存储用户的身份。我们需要从数据库中提取每个帐号的用户名和密码以便与$PHP_AUTH_USER和$PHP_AUTH_PW变量进行比较,判断用户的真实性。

首先,在MySql中建立一个存放用户信息的数据库

数据库名为XinXiKu ,表名为user;表定义如下:

View Code 1 create table user(
2 ID INT(4) NOT NULL AUTO_INCREMENT,
3 name VARCHAR(8) NOT NULL,
4 password CHAR(8) NOT NULL,
5  PRIMARY KEY(ID)
6 )


说明:

1、ID为一个序列号,不为零而且自动递增,为主键;

2、name为用户名,不能为空;

3、password为用户密码,不能为空;

以下是用户验证文件login.php教程

View Code  1 //判断用户名是否设置
 2 if(!isset($PHP_AUTH_USER))
 3 {
 4 header("WWW-Authenticate:Basic realm="身份验证功能"");
 5 header("HTTP/1.0 401 Unauthorized");
 6 echo "身份验证失败,您无权共享网络资源!";
 7 exit();
 8 }
 9 /*连接数据库*/
10 $db=mysql教程_connect("localhost","root","");
11 //选择数据库
12 mysql_select_db("XinXiKu",$db);
13 //查询用户是否存在
14 $result=mysql_query("SELECT * FROM user where name='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'",$db);
15 if ($myrow = mysql_fetch_row($result))
16 {
17 //以下为身份验证成功后的相关操作
18 ...
19 }
20 else
21 {
22 //身份验证不成功,提示用户重新输入
23 header("WWW-Authenticate:Basic realm="身份验证功能"");
24 header("HTTP/1.0 401 Unauthorized");
25 echo "身份验证失败,您无权共享网络资源!";
26 exit();
27 }
28 ?>

程序说明:

在程序中,首先检查变量$PHP_AUTH_USER是否已经设置。如果没有设置,说明需要验证,脚本发出HTTP 401错误号头标,告诉客户端的浏览器需要进行身份验证,由客户端的浏览器弹出一个身份验证窗口,提示用户输入用户名和密码,输入完成后,连接数据库,查询该用用户名及密码是否正确,如果正确,允许登录进行相关操作,如果不正确,继续要求用户输入用户名和密码。

函数说明:

1、isset():用于确定某个变量是否已被赋值。根据变量值是否存在,返回true或false

2、header():用于发送特定的HTTP标头。注意,使用header()函数时,一定要在任何产生实际输出的HTML或PHP代码前面调用该函数。

3、mysql_connect():打开 MySQL 服务器连接。

4、mysql_db_query():送查询字符串 (query) 到 MySQL 数据库。

5、mysql_fetch_row():返回单列的各字段。

二、用session实现服务器验证

对于需要身份验证的页面,使用apache服务器验证是最好不过的了。但是,apache服务器验证的界面不够友好。而且,cgi模式的php,iis下的php,都不能使用apache服务器验证。这样,我们可以利用session在不同页面间保存用户身份,达到身份验证的目的。

在后端我们同样利用上面的Mysql数据库存放用户信息。

我们先编写一个用户登录界面,文件名为login.php,代码职下:

View Code 1 <form action="login1.php">
2 用户名:<input type="text" name="name"><br>
3 口 令:<input type="text" name="pass"><br>
4 <input type="submit" value="登录">
5 </form>

login1.php处理提交的表单,代码如下:
View Code  1 $db=mysql_connect("localhost","root","");
 2 mysql_select_db("XinXiKu",$db);
 3 $result=mysql_query("SELECT * FROM user where name='$name' and password='$pass'",$db);
 4 if ($myrow = mysql_fetch_row($result))
 5 {
 6 //注册用户
 7 session_start();
 8 session_register("user");
 9 $user=$myrow["user"];
10 // 身份验证成功,进行相关操作
11 ...
12 }
13 else
14 {
15 echo"身份验证失败,您无权共享网络资源!";
16 }
17 ?>


这里需要说明的是,用户可以使用在后续的操作中用**http://domainname/next.php?user=用户名 **来绕过身份验证。所以,后续的操作应先检查变量是否注册:已注册,则进行相应操作,否则视为非法登录。相关代码如下:
View Code  1 session_start();
 

2 if (!session_is_registered("user"))
 3 {
 4 echo "身份验证失败,属于非法登录!";
 5 }
 6 else
 7 {
 8 //成功登录进行相关操作
 9 ...
10 }
11 ?>
[!--infotagslink--]

相关文章

  • Mysql索引会失效的几种情况分析

    索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)  注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 ...2014-06-07
  • sqlserver中distinct的用法(不重复的记录)

    distinct这个关键字用来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。...2020-07-11
  • C# Distinct和重写IEqualityComparer时要知道的二三事

    这篇文章主要给大家介绍了关于C# Distinct和重写IEqualityComparer时要知道的二三事,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
  • 微信jssdk在iframe页面失效问题的解决措施

    这篇文章主要介绍了微信jssdk在iframe页面失效问题的解决措施 的相关资料,需要的朋友可以参考下...2016-03-07
  • 基于list循环删除元素,迭代器失效的问题详解

    下面小编就为大家带来一篇基于list循环删除元素,迭代器失效的问题详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
  • 如何使用PHP和PEAR进行不同时区的转换

    PHP具备一系列日期和时间函数,这为您获取时间信息提供了便利,您可以将这些信息转换为需要的格式并用于计算或者展示给用户。但是假如您想实现一些复杂的功能,事情可能会变...2016-11-25
  • MySQL隐式类型转换导致索引失效的解决

    本文主要介绍了MySQL隐式类型转换导致索引失效的解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-12
  • Thinkphp 中 distinct 的用法解析

    TP中distinct()的用处主要是去除重复的值,下面我通过实例代码给大家介绍下Thinkphp 中 distinct 的用法,一起看看吧...2017-01-08
  • MySQL索引失效的几种情况汇总

    这篇文章主要介绍了MySQL索引失效的几种情况,帮助大家更好的理解和使用MySQL索引,感兴趣的朋友可以了解下...2020-09-25
  • PHP Header失效的原因分析及解决方法

    下面小编就为大家带来一篇PHP Header失效的原因分析及解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-11-22
  • 解决Spring AOP 同类调用失效问题

    这篇文章主要介绍了解决Spring AOP 同类调用失效问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-30
  • asp.net4.0框架下验证机制失效的原因及处理办法

    asp.net4.0框架下验证机制失效的原因及处理办法,需要的朋友可以参考一下...2021-09-22
  • SQL中distinct 和 row_number() over() 的区别及用法

    这篇文章主要介绍了SQL中distinct 和 row_number() over() 的区别及用法的相关资料,需要的朋友可以参考下...2017-03-14
  • Android给按钮设置背景的同时设置圆角例子

    下面我们来看一篇关于Android给按钮设置背景的同时设置圆角例子,希望文章对于安卓开发者会带来帮助的哦,具体如下. 之前在做按钮的时候遇到在给按钮设置一张图片...2016-11-01
  • asp.net2.0中css失效的解决方法

    经常有人遇到ASP.NET 2.0(ASP.NET 1.x中可能是有效的)中CSS失效的问题,现将主要原因和解决方法罗列如下...2021-09-22
  • IIS6 MVC4 路由失效 无法访问的解决方法

    这篇文章主要介绍了IIS6 MVC4 路由失效 无法访问的解决方法,需要的朋友可以参考下...2016-01-27
  • Django 解决distinct无法去除重复数据的问题

    这篇文章主要介绍了Django 解决distinct无法去除重复数据的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-20
  • SpringBoot使用AOP,内部方法失效的解决方案

    这篇文章主要介绍了SpringBoot使用AOP,内部方法失效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-29
  • 一个有关DISTINCT的问题解答

    经常会有朋友问到类似于这样的问题, 表中的数据如下 ID AA BB 1 123 456 1 4535 54 1 60 6564 1 60 656 2 50 664 2 60...2016-11-25
  • mysql回表致索引失效案例讲解

    这篇文章主要介绍了mysql回表致索引失效案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-14