我过去没有使用过CHAR,因为我似乎过多使用VARCHAR; 我最近在适当时尝试使用CHAR,并且根据我的理解,当数据在某个列中的长度相同时使用它(否则用空格填充).
因为所有的数据应该是相同的长度,我想知道CHAR字段可以是NULL还是空字符串?对于特定字段没有值而其他字段具有价值的情况.
我有一个示例查询,例如:
SELECT
rest.name, rest.shortname
FROM
restaurant AS rest
INNER JOIN specials ON rest.id=specials.restaurantid
WHERE
specials.dateend >= CURDATE()
AND
rest.state='VIC'
AND
rest.status = 1
AND
specials.status = 1
ORDER BY
rest.name ASC;
Run Code Online (Sandbox Code Playgroud)
只是想知道下面两个索引,哪个最好在餐厅桌上?
id,state,status,name
state,status,name
Run Code Online (Sandbox Code Playgroud)
只是不确定是否应该包含连接中使用的列?
有趣的是,我已经创建了两种类型的测试,并且两次MySQL选择主要索引,这只是id.这是为什么?
解释输出:
1,'SIMPLE','specials','index','NewIndex1\,NewIndex2\,NewIndex3\,NewIndex4','NewIndex4','11',\N,82,'Using where; Using index; Using temporary; Using filesort',
1,'SIMPLE','rest','eq_ref','PRIMARY\,search\,status\,state\,NewIndex1\,NewIndex2\,id-suburb\,NewIndex3\,id-status-name','PRIMARY','4','db_name.specials.restaurantid',1,'Using where'
Run Code Online (Sandbox Code Playgroud)
目前没有多少行,所以也许这就是它选择PRIMARY的原因!?
我只想检查这段代码是否适用于我想要做的事情(用一个空格替换制表符或多个空格.
preg_replace('/\t+|\s{2,}/', ' ', $street);
Run Code Online (Sandbox Code Playgroud)
然而,如果它找到一个标签和一个空格,那么我们最终会得到两个空格呢?原始空间和新标签被替换为.
如何更改它,以便字符串中的任何空格始终只是一个空格?
我只是用mysql做了一堆测试,full text boolean mode从我的测试来看,似乎你不能在多个单词上使用减号?
我有两行例如..
id,name
1,2011-12 Fleer Retro auto jordan non
2,1999 jordan non auto
Run Code Online (Sandbox Code Playgroud)
如果我运行以下查询:
SELECT auction_id,`name`,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -non' IN BOOLEAN MODE);
Run Code Online (Sandbox Code Playgroud)
两行都没有按预期显示.但是,如果我运行此查询:
SELECT auction_id,`name`,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -"non auto"' IN BOOLEAN MODE);
Run Code Online (Sandbox Code Playgroud)
两行都不显示(相同的结果).不应该排1回来吗?
编辑:我ft_min_word_len的设置为2,我已禁用我的停用词文件,因此它与此无关.
小提琴:http://sqlfiddle.com/#!2/d1987/4
但是,似乎小提琴使用默认的停用词文件,因此使用"非"字测试它不起作用.
我知道PHP是单线程的,所以我想知道,这是否意味着如果我foo.php在浏览器选项卡中运行说然后打开另一个浏览器选项卡并运行相同的文件,如果foo.php仍然在其他浏览器选项卡中运行它仍然会运行! ?
如果没有,你怎么能一次运行相同的脚本?你只是将脚本重命名为其他内容,然后你可以同时运行这两个脚本吗?......或者我在这里感到困惑?
我正在使用并且正在使用基本邮件程序类Yii 2中的邮件程序,并且在大多数情况下它工作正常,但有时无法发送......所以我的代码如下:
// Let's start composing the message
$mail = Yii::$app->mailer->compose($view_data, $view_params);
//.........
// Send the message
$send = $mail->send();
Run Code Online (Sandbox Code Playgroud)
有时$send是,false但我不确定你如何找出它为什么是假的?有没有办法得到使它变成假的错误?
我试图设置自定义id一个input字段,同时使用ActiveField在Yii2.
我尝试了下面的内容,但它改为设置id字段容器而不是input字段本身.
$form->field($model, 'some_id', ['options' => ['id' => 'some_id']])->hiddenInput(['value' => $some_id])->label(false);
Run Code Online (Sandbox Code Playgroud)
有没有办法可以设置id输入字段本身的属性?
我注意到了inputOptions选项,但这似乎控制了所有字段的设置,所以不确定它如何与选择器等完全一致.
我正在使用Yii2并且一直在使用通过AJAX执行POST的链接来检索一些数据并且它一直正常工作; 但是我注意到,如果我从页面中删除一个表单,它将不再起作用,并且由于某种原因不会在标题中发送CSRF令牌.
在这两种情况下,我还在页面上有几个隐藏的表单.
以下是两种情况:
工作情况:
页面上的所有CSRF都是相同的 - meta标记的标记csrf-token,页面上的主要表单以及所有隐藏的表单,它们都使用SAME CSRF令牌,这与请求的标头中发送的标记相同.
...现在我改变了场景,因此我可以生成非工作版本.
不工作情况:
在这种情况下,页面上没有主要表单.meta命名的标记csrf-token具有与上一个请求不同的CSRF标记,但由于某种原因,所有隐藏的表单都具有来自先前请求/页面加载的相同CSRF标记.
当我点击通过AJAX POST的链接时,标题中没有发送CSRF令牌.
如果重要:
的主要形式加载ActiveForm::begin(...)而隐藏的形式加载Html::beginForm(...).
知道这里发生了什么吗?为什么不起作用?为什么隐藏的表单具有先前请求中的CSRF令牌?
好吧,我之前没有使用托管按钮,但它更有意义,因为它们更安全.
我环顾四周,一直在阅读文档(这些文档并不是那么有用),到目前为止我找到的最好的帮助就在这里 ; 虽然我仍然对确切放置代码的地方感到困惑?
另外,我在技术上不想要一个"按钮",但它背后的想法似乎是我想要的.
我想要做的就是每次都使用相同的查询变量而只是想改变价格 - 价格是动态的,具体取决于用户在表单中选择的内容.
另外,我本来不想要一个按钮,我更倾向于用适当的数据将用户重定向到贝宝,但不确定如何在设置动态价格时这样做呢?
如果我没有设置动态价格,我知道我可以将查询变量附加到URL上的托管按钮,然后重定向到该URL,但我需要更改价格,因此我的问题......
php ×7
yii2 ×4
mysql ×3
yii ×3
ajax ×1
booleanquery ×1
char ×1
indexing ×1
null ×1
paypal ×1
paypal-ipn ×1
preg-replace ×1
regex ×1
swiftmailer ×1