小编Mar*_* AJ的帖子

当条件之间存在OR时,MySQL能否使用索引?

我有两个查询加上自己EXPLAIN的结果:

一:

SELECT * 
FROM notifications 
WHERE id = 5204 OR seen = 3
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

基准(10,000行):0.861


二:

SELECT h.* FROM ((SELECT n.* from notifications n WHERE id = 5204) 
                    UNION ALL
                 (SELECT n.* from notifications n WHERE seen = 3)) h 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

基准(10,000行):2.064


上面两个查询的结果是相同的.我在notifications桌子上也有这两个索引:

notifications(id) -- this is PK
notification(seen)
Run Code Online (Sandbox Code Playgroud)

如您所知,OR通常会阻止索引的有效使用,这就是我编写第二个查询(by UNION)的原因.但经过一些测试后,我发现使用OR它的速度要快得多UNION.所以我很困惑,我真的不能选择我的最佳选择.

基于一些合理和合理的解释,使用union更好,但基准测试的结果表明使用OR更好.如果我使用哪种方法,请你帮助我吗?

mysql sql

6
推荐指数
2
解决办法
298
查看次数

如何在外层设置内部元素边框?

这是我的代码:

        .compare_header_box{
            padding: 35px 30px;
            direction: rtl;
        }
        .compare_header_box_title{
            font-size: 30px;
            width: 100px;
            float: right;
            margin-right: 5px;
            margin-top: 4px;
        }
        .compare_header_box_items{
            width: 100%;
            border-bottom: 1px solid #ccc;
            direction: ltr;
        }
        .compare_header_box_items a{
            display: inline-block;
            font-size: 16px;
            padding: 15px 40px;
            
        }
        .compare_header_box_items a:hover{
            text-decoration: none;
            background-color: #f1f1f1;
            color: black;
        }
        .compare_header_box_items .active{
            border-top: 3px solid orange;
            border-right: 1px solid #ccc;
            border-left: 1px solid #ccc;
            border-bottom: 1px solid white;
        }
Run Code Online (Sandbox Code Playgroud)
        <div class="compare_header_box">
            <span class="compare_header_box_title active">List</span>
            <div class="compare_header_box_items">
                <a href="./gp">gp</a>
                <a href="./in">in</a>
                <a …
Run Code Online (Sandbox Code Playgroud)

html javascript css jquery

6
推荐指数
1
解决办法
64
查看次数

如何通过 PHP 搜索 Linkedin?

我有一个 PHP 脚本,它通过使用打开 http 请求CURL:(如果需要,它还接受标头)

   $c = curl_init();
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
if ($post_paramtrs) {
    curl_setopt($c, CURLOPT_POST, TRUE);
    curl_setopt($c, CURLOPT_POSTFIELDS, "var1=bla&" . $post_paramtrs);
}
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0");
curl_setopt($c, CURLOPT_COOKIEJAR, $dirname . 'cookief.txt');
curl_setopt($c, CURLOPT_COOKIEFILE, $dirname . 'cookief.txt');
curl_setopt($c, CURLOPT_MAXREDIRS, 10);
$follow_allowed = (ini_get('open_basedir') || ini_get('safe_mode')) ? false : true;
if ($follow_allowed) {
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
}
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 9);
curl_setopt($c, CURLOPT_REFERER, $url);
curl_setopt($c, …
Run Code Online (Sandbox Code Playgroud)

javascript php security curl

6
推荐指数
1
解决办法
1212
查看次数

将日期分类为"昨天","上周"等

我有这样一张桌子:

// mytable
+----+------------+
| id | date_time  |
+----+------------+
| 1  | 1464136759 | -- 5 days ago
| 2  | 1464436759 | -- 2 days ago
| 3  | 1464538248 | -- 6 hours ago
+----+------------+
--                     ^ these are based on current time which is 1464561158
Run Code Online (Sandbox Code Playgroud)

我也有这个问题:

SELECT id, CASE DATE(FROM_UNIXTIME(date_time))
           WHEN CURDATE() THEN 'today' 
           WHEN CURDATE() - INTERVAL 1 DAY THEN 'yesterday'
           WHEN CURDATE() - INTERVAL 7 DAY THEN 'in last week'
           ELSE 'in last month …
Run Code Online (Sandbox Code Playgroud)

mysql sql unix-timestamp

5
推荐指数
1
解决办法
161
查看次数

是否触发交易?

我有一些触发器BEFORE INSERTAFTER DELETE在桌子上。如何确保触发器失败,然后我的查询得到回滚?

我的意思是我想确定,要么查询和触发都有效,要么它们都不起作用。那么是触发器交易吗?

mysql sql triggers

5
推荐指数
2
解决办法
6082
查看次数

一个查询每个表只能使用一个索引吗?

我有一个这样的查询:

( SELECT * FROM mytable WHERE author_id = ? AND seen IS NULL )
UNION
( SELECT * FROM mytable WHERE author_id = ? AND date_time > ? )
Run Code Online (Sandbox Code Playgroud)

我还有这两个索引:

(author_id, seen)
(author_id, date_time)
Run Code Online (Sandbox Code Playgroud)

我在某处读到:

WHERE一个查询在处理子句时一般每个表只能使用一个索引

正如您在我的查询中看到的,有两个单独的WHERE子句。所以我想知道,“每个表只有一个索引”意味着我的查询只能使用这两个索引之一,或者它可以为每个子查询使用这些索引之一并且这两个索引都有用?

换句话说,这句话是真的吗?

“总是会使用其中一个索引,而另一个则无用”

mysql sql

5
推荐指数
1
解决办法
1725
查看次数

如何选择帖子的最后编辑版本?

这是表结构:

+----+-----------------------------+-----------+
| id |       post_content          | edited_id |
+----+-----------------------------+-----------+
| 1  | content 1                   | NULL      |
| 2  | content 2                   | NULL      |
| 3  | content 1 (edited)          | 1         |
| 4  | content 3                   | NULL      |
| 5  | content 4                   | NULL      |
| 6  | content 4 (edited)          | 5         |
| 7  | content 1 (edited)          | 1         |
+----+-----------------------------+-----------+
Run Code Online (Sandbox Code Playgroud)

现在我想选择每篇文章的最新编辑版本.所以这是预期的结果:

+----+-----------------------------+-----------+
| id |       post_content          | edited_id |
+----+-----------------------------+-----------+ …
Run Code Online (Sandbox Code Playgroud)

mysql sql mysql-select-db

5
推荐指数
1
解决办法
81
查看次数

如何延迟发送ajax请求?

这是我的代码:

$("input").on('keydown', function(){
    $.ajax({
        url :  '/files/tags_autocomplete.php',
        dataType : 'JSON',
        success : function (tags) {
            $("ul").html(tags.output);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

我的代码在用户输入标签时向用户建议了一些标签(具有匹配的子字符串与用户目前已写入的标签)作为自动完成框.

我的问题是什么?我当前的代码每个keydown发送一个新的ajax请求.例如,如果用户写入something,我的脚本会发送9个ajax请求,这看起来像是一场噩梦.

无论如何,我该怎么处理?我的意思是我需要实现发送延迟吗?像"在插入最后一个字符后1秒才发送请求"之类的东西?或者有更好的主意吗?

javascript php ajax jquery

5
推荐指数
1
解决办法
1071
查看次数

为什么我的右键单击框中没有“Git Init Here”选项?

我正在尝试开始学习git并使用它。我已经下载了有关该内容的培训视频git,目前正在观看。

我已经下载并安装git在我的电脑上。我使用 Windows 8 操作系统(32 位版本)。Git Init Here但我不知道为什么我右键单击时没有选项:

在此输入图像描述

正如你所看到的,当我右键单击时出现的框有两个关于 git 的选项:

  • Git GUI Here
  • Git Bash Here

但教程视频中的选项还有一个名为 的选项Git Init Here。那么,为什么我的没有这个选项呢?是不是我安装git 错了?

git git-for-windows

5
推荐指数
1
解决办法
1893
查看次数

如何删除所有本地提交并转到分支主服务器上的最后一个提交(在远程存储库上)?

我在存储库中进行了一些更改,并注册了一个提交(在本地)。然后我执行了这个:

$ git pull origin master
Run Code Online (Sandbox Code Playgroud)

我的本地提交与被拉的合并。现在我很后悔。我想获取远程分支主服务器上的最新版本,并获取本地提交(已合并)的信息。

我可以通过以下命令更改工作目录:

// the last commit on the remove branch master
$ git checkout 84acc42 .
Run Code Online (Sandbox Code Playgroud)

但是,如果我对其进行一些更改并将其推送,我想以前的更改仍然存在并且也将作为提交推送。因为该提交存在。

注意,$ git reset --hard这不会删除任何内容。我执行了该操作,但仍然看到了不需要的更改。

知道如何获取远程存储库(分支母版)上的最新版本并删除其他所有内容吗?我可以通过删除本地工作目录并从存储库中再次克隆来实现。但是我想知道是否还有另一种方法。

git github

5
推荐指数
1
解决办法
1570
查看次数