我希望能够从数据库中提取15个左右的记录.我已经看到WHERE id = rand()随着数据库变大,使用会导致性能问题.我见过的所有解决方案都是为了选择单个随机记录.我想得到倍数.
有谁知道为大型数据库执行此操作的有效方法?
编辑:
进一步编辑和测试:
我在使用MyISAM的新数据库上创建了一个相当简单的表.我给了这3个字段:( autokey无符号自动数字键)bigdata(大blob)和somemore(中等int).然后我将随机数据应用到表中并使用Navicat运行一系列查询.结果如下:
Query 1: select * from test order by rand() limit 15
Query 2: select *
from
test
join
(select round(rand()*(select max(autokey) from test)) as val from test limit 15) as rnd
on
rnd.val=test.autokey;`
Run Code Online (Sandbox Code Playgroud)
(我尝试了选择和选择不同,它没有明显的区别)
和:
Query 3 (I only ran this on the second test):
SELECT *
FROM (
SELECT @cnt := COUNT(*) + 1,
@lim := 10
FROM test
) vars
STRAIGHT_JOIN …Run Code Online (Sandbox Code Playgroud) 我有两个表,一个用于文章/民意调查,一个用于对这些文章进行投票.投票在枚举字段中进行上/下,以及其他几个选项.我正在尝试创建一个查询,它将返回我需要的文章数据,并给我所有投票的总和.不幸的是,我得到了意想不到的结果.它统计了我所有的选票,就好像他们是第一次进入,而没有其他任何人.
如何正确地将我的投票链接到他们所属的民意调查?
tblVotes
[PK] primaryId | voterId (FK) | voteValue (enum) | postID (fk)
----------------------------------------------------------------------
1 10 up 1
2 11 down 1
3 11 up 10
tblContent
[PK] unique Id | postTitle | postBody | postAuthor(FK) |
------------------------------------------------------------------
1 foo foofoo 12
10 bar barbar 10
11 foobar foofoobarbar 10
Run Code Online (Sandbox Code Playgroud)
当我调查下面详述的查询时,我希望我会得到这样的结果:
uniqueId |userName | pollDate | postTitle |postBody | upVotes| downVotes
--------------------------------------------------------------------------
1 bob 1/1/11 foo foofoo 1 1
10 john 1/2/11 bar barbar 1 null
11 john 1/3/11 …Run Code Online (Sandbox Code Playgroud) 我在JS中添加了一个事件监听器来监听keyup/keydown事件,我试图在HTML画布上移动一个sprite.我有大部分工作,但当用户按下箭头键时页面正在滚动.
我回归虚假,这似乎不起作用.另外,我的理解是以这种方式返回false会禁用整个页面的箭头按钮滚动.我想只在用户与画布本身交互时禁用它.
这是我的事件监听器:
addEventListener('keydown', function(e){
move = false;
x = false;
y = false;
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
switch(keycode){
case 37:
move = true;
x = 'negative';
break;
case 38:
move = true;
y = 'negative'
break;
case 39:
move = true;
x = 'positive'
break;
case 40:
move = true;
y = 'positive'
break;
}
if(move){
animation.move(x,y);
}
return false;
})
Run Code Online (Sandbox Code Playgroud)
编辑:
下面的答案很清楚如何确保画布是专注的,但我仍然感到困惑,为什么在我的EventListener函数中返回false,返回false不会禁用滚动.
javascript scroll event-listener addeventlistener html5-canvas
这似乎对JQuery来说应该是微不足道的,但是这个函数隐藏了整个表单......有人能指出我正确的方向吗?
$('form')
.children()
.filter(function(){
return $(this).data('show', 'pro')
})
.show();
$('form')
.children()
.filter(function(){
return $(this).data('show', 'home')
})
.hide();
Run Code Online (Sandbox Code Playgroud) 我似乎有些代码表明使用javascript你可以<audio>使用类似的东西来设置HTML5 元素的音量级别document.getElementById('player').volume-=0.1,但我找不到任何指示音量范围的东西?0-5?0-10?0-100?有谁知道audio标签的最大音量是多少,以及可以提出的最小增量是多少?
我已经看到了JavaScript代码中使用的这种格式,但找不到合理的意义来源.
编辑后续行动:
感谢所有快速解答!我觉得它就像那样.现在,获得奖励积分:
你能用吗(var1?var2)
做同样的事情
if (var1) {
var2
}
Run Code Online (Sandbox Code Playgroud)
?
我有一个对象数组,我需要按照一定的顺序放置,具体取决于一些配置数据.我有一个问题,以正确的顺序itterating通过数组.我想如果我制作了数组,然后逐步执行for循环,我就能正确执行代码.除了一个用例之外,它工作得很好,我将第四个项添加到数组中,然后返回第三个项.
links[0] = foo
links[1] = bar
links[2] = foobar
links[3] = a_herring
links[4] = a_shrubery
order = [] //loaded from JSON, works has the numbers 1 2 3 or 4 as values
//in this case:
order[0] = 1
order[1] = 2
order[2] = 4
order[3] = false
order[4] = 3
for(x in order){
if(order[x]){
printOrder[order[x]]=links[x]
//remember that in this case order[0] would
}
Run Code Online (Sandbox Code Playgroud)
这应该给我一个如下所示的数组:
//var printOrder[undefined,foo,bar,a_shrubbery,foobar]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试通过数组进行迭代时:
for(x in printOrder){
printOrder[x].link.appendChild(printOrder[x].image)
printOrder[x].appendChild(printOrder[x].link)
printOrder[x].appendChild(printOrder[x].text)
document.getElementById("myDiv").appendChild(printOrder[x]);
}
Run Code Online (Sandbox Code Playgroud)
我得到foo, bar, foobar, …
我正在尝试编写一个脚本,它将找到<a>目标是jpg,gif或png的所有标记,并为它们附加一个函数.
$('a')
.filter(function(){
return this.href.match(/*probably some regex here?*/)
})
.bind('mouseover', function(){
alert('foo');
})
Run Code Online (Sandbox Code Playgroud)
这应该有效,但我不知道正则表达式会是什么样子.如果有更好的方法,请告诉我.谢谢!
我试图使用一个函数重复数据库调用使生活变得更容易,该函数应该(理论上)允许我使用数组绑定参数:
function query($tblName,$queryParams = false){
$this->queryObject = $this->con->prepare($this->queryString);
if($queryParams){
foreach ($queryParams as $key => $value) {
$this->queryObject->bindParam($key, $value);
}
}
$this->queryResult = $this->queryObject->execute();
print_r($this->queryResult);
}
Run Code Online (Sandbox Code Playgroud)
然后我就这样打电话:
$queryParams = array(':userName' => $_POST['username'], ':password' => $_POST['password'], ':salt'=>$userUser->salt, ':userEmail'=>$_POST['email']);
$registrationDb->query('tblUser', $queryParams);
Run Code Online (Sandbox Code Playgroud)
数据库连接正在运行,并且正在进行写入,但是,所有值都被设置为$_POST['email],我无法弄清楚为什么会发生这种情况.
有没有更好的方法来做到这一点?
我需要编写一个将被解释为数组的JSON字符串,但只有某些索引实际上会有任何值.
我想要一个看起来像这样的数组:
array[1] = ["foo", "bar"]
array[5] = ["things", "stuff"]
array[37] = ["etc"];
Run Code Online (Sandbox Code Playgroud)
所以我可以回复"东西" array[5][1].
问题是并非所有东西都有值,而且我正在手工编写这个字符串,所以我真的不想从0开始并执行所有空值.是否有捷径可寻?
好吧,理论上这应该是一个简单的,希望我只是遗漏了一些明显的东西.我有以下HTML标记:
<ul id="cPlayControlRack">
<li class="cplaybutton"></li>
<li class="CpauseButton CplayHidden"></li>
<li class="CplaySkipBack"></li>
<li class="CplaySkipForward"></li>
<li class="CplayVolumeIcon"></li>
<li class="CplayVolumeSlide"></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
以下CSS:
#cPlayControlRack{
height:28px;
}
#cPlayControlRack li{
width:29px !important;
height:28px !important;
background-image:url(background:url(i/playersprite.png);
background-repeat:no-repeat;
display:block;
}
.cplaybutton{background-position:0 0;}
.CpauseButton{background-position:30px 0;}
.CplaySkipBack{background-position:60px 0;}
.CplaySkipForward{background-position:90px 0;}
.CplayVolumeIcon{background-position:120px 0;}
.CplayVolumeSlide{background-position:150px 0;}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,第一条规则是匹配.#cPlayControlRack使得UL28px高.但是,没有其他规则匹配,因此没有显示精灵,并且没有给出高度或宽度.
JSFiddle:http://jsfiddle.net/4r2jm/
编辑:我的标记是动态生成的,而不是那应该会产生差异的AFAIK.
我试图看看是否有任何输入使用JQuery类"无效".
$('#formId input').hasClass('invalid');
Run Code Online (Sandbox Code Playgroud)
正在恢复false.即使在我使用.addClass('invalid')了输入并通过Chrome的DOM检查员验证该类存在之后.
以下建议无效.我的标记与形式>输入略有不同.
我正在尝试将PHP中的登录脚本拼凑成一个学习项目.
这是用户注册时我的数据库写入的代码.这两个值都写入数据库.
$this->salt = md5(uniqid());
$this->password = md5($password.$salt);
Run Code Online (Sandbox Code Playgroud)
登录后,将触发以下函数.
function challengeLogin($submittedPassword, $publicSalt, $storedPassword){
if(md5($submittedPassword.$publicSalt) == $actualPassword){
return 0;
}else{
return 1;
};
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,在单步执行代码时,这两个值从未达到过.有人可以帮我理解为什么吗?