你好,我是PHP的正规表达新手
我正在尝试解决一个问题,我可以向MySQL插入数据,该字段是"timestamp"
$string1 = "7/1/2015, 19:42:52";
$string2 = "12/12/2015, 1:08:17";
$string1 = preg_replace("/\//",'-',$string);
$string2 = preg_replace("/\//",'-',$string);
Run Code Online (Sandbox Code Playgroud)
这一步将是:
7-1-2015, 19:42:52
12-12-2015, 1:08:17
Run Code Online (Sandbox Code Playgroud)
如果我整理出来(包括ZEROFILL)就像:
string1 = 2015-07-01 19:42:52
string2 = 2015-12-12 01:08:17
Run Code Online (Sandbox Code Playgroud)
我能做什么..?
我有MySQL DB,我总是问同样的"问题",我改变的只是查询中的VIN变量.
更具体地说,我向你展示了2个查询:第一个有VIN:(U5YFF24128L064909需要0.0002秒)
SELECT c.vin, c.case_id, c.claimnumber, c.platenumber, c.axrmrs_id,
c.insurer_memberid, c.country, c.date_created, c.totalloss,
c.lastcalc_manufacturer_code, c.lastcalc_model_code, c.lastcalc_submodel_code,
c.audavin_triggered, c.accident_date, c.registration_date,
c.manufacturing_year, cl.spareparts, cl.totalcosts, cl.laborhours,
cl.laborcosts, cl.calculationdate, cl.paintlabor, cl.paintmaterial,
cl.currency, car.manufacturer, car.model, car.submodel,
IFNULL(org.name, 0) as orgName, GROUP_CONCAT(DISTINCT IF(po.repairmethod LIKE 'L%',
po.text,NULL)
ORDER BY 1) AS textL, GROUP_CONCAT(DISTINCT IF(po.repairmethod = 'E',
po.text,NULL
)
ORDER BY 1) AS textE , GROUP_CONCAT(DISTINCT IF(po.repairmethod != 'E'
OR (po.repairmethod = 'E'
AND po.guidenumber = 'N/A'
)
AND po.repairmethod NOT LIKE 'L%',po.text, NULL
)
ORDER …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过在SQL选项卡中键入以下内容并Go单击按钮来更改具有10.1.13-MariaDB的PhPMyAdmin的根密码:
ALTER USER
'root'@'localhost' IDENTIFIED BY 'mypass'
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Error
SQL query:
ALTER USER
'root'@'localhost' IDENTIFIED BY 'mypass'
MySQL said: Documentation
Run Code Online (Sandbox Code Playgroud)
1064-您的SQL语法有误;检查与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在第1行的'USER'root'@'localhost'IDENTIFIED BY'mypass'附近使用
我在MySQL网站上遵循了本教程:
创建一个包含一行密码分配语句的文本文件。用您要使用的密码替换密码。
MySQL 5.7.6及更高版本:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'MySQL 5.7.5及更早版本:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
我有几个插入语句,我只想在它们为真时执行。
这是我的例子:
START TRANSACTION;
INSERT INTO fields (field_name, control_type_id, needs_approval)
VALUES
('Array Photos', 3, 0);
INSERT INTO field_to_job_type (field_id, job_type_id, sequence_number, parent_id)
VALUES
(last_insert_id(), (SELECT job_type_id FROM job_types WHERE job_type_name = 'Cash'), 1, (SELECT field_id FROM fields where field_name = 'Photo Pack'));
COMMIT;
Run Code Online (Sandbox Code Playgroud)
现在,如果此查询只有 1 个结果,我真的只想运行第二个查询:
SELECT job_type_id FROM job_types WHERE job_type_name = 'Cash'.
如果该查询返回 2 个结果,我想放弃交易。
那可能吗?我试过的东西:
START TRANSACTION;
INSERT ...;
INSERT ...;
IF(SELECT count(job_type_name) FROM job_types WHERE job_type_name = 'Cash') = 1, 'COMMIT', 'ROLLBACK');
Run Code Online (Sandbox Code Playgroud)
哪个,显然没有用。
我有表包含文本和blob字段和其他一些,我想知道如果使用这些类型的数据会减慢对表的访问速度
CREATE TABLE post
(
id INT(11),
person_id INT(11) ,
title VARCHAR(120) ,
date DATETIME ,
content TEXT,
image BLOB ,
);
Run Code Online (Sandbox Code Playgroud)
假设我有超过100,000个帖子,我想做一些查询
SELECT * FROM post WHERE post.date >= ? AND post.person_id = ?
Run Code Online (Sandbox Code Playgroud)
如果表不包含TEXT和BLOB字段,查询会更快
我从查询中得到了这个数组。
Array
(
[0] => Array
(
[user_id] => 5
[first_name] => Diyaa
[profile_pic] => profile/user5.png
)
[1] => Array
(
[user_id] => 8
[first_name] => Raj
[profile_pic] => profile/user8.jpg
)
[2] => Array
(
[user_id] => 10
[first_name] => Vanathi
[profile_pic] => profile/user10.jpg
)
)
Run Code Online (Sandbox Code Playgroud)
我需要将数组索引设置为如下所示的数组值( user_id):
Array
(
[5] => Array
(
[user_id] => 5
[first_name] => Diyaa
[profile_pic] => profile/user5.png
)
[8] => Array
(
[user_id] => 8
[first_name] => Raj
[profile_pic] …Run Code Online (Sandbox Code Playgroud) 我正在运行一个node.js脚本,该脚本将数据从公共“数据库”(这是一个“区块链”)中拉出,然后对其执行一些操作,然后将其插入到MySQL数据库中。我有使用UTF8_general_ci编码的MySQL数据库。绝大多数数据解析都很好,但是每隔很多次它就会遇到无法插入的内容。我收到此错误:
code: 'ER_TRUNCATED_WRONG_VALUE_FOR_FIELD',
errno: 1366,
sqlMessage: 'Incorrect string value: \'\\xF0\\x9F\\x8D\\x95 N...\' for column \'body\' at row 1',
sqlState: 'HY000',
index: 0,
Run Code Online (Sandbox Code Playgroud)
它显示了似乎引起错误的字符串位,并且始终具有以下独特的问号字符:
This looks like Paradise for me! ????\
我猜这是编码问题?有没有一种方法可以在引发错误之前将其转换?我不确定该区块链使用什么编码,甚至不确定如何找到。
编辑:这是此区块链的网络界面上显示的另一个示例(错误):
并非常欢迎您!
另一个编辑:我应该指出,我正在使用mysql.format(sql, inserts)这些数据来处理无意的sql问题-https: //github.com/mysqljs/mysql#preparing-queries
我已经阅读了很多关于这个主题的帖子,但我还不满意.
我有一个名为ticket以下列的表
TicketID | AirlineID | PassengerID | TicketPrice | TicketVolume | DestinationCountry | ExitCountry | TicketDate`
Run Code Online (Sandbox Code Playgroud)
我有多个查询,如
SELECT AVG(TicketPrice)
FROM ticket
WHERE TicketPrice between 552 and 1302
AND AirlineID=1
AND TicketDate between '2016-01-01' and '2016-12-31'
GROUP BY TicketDate
SELECT AVG(TicketPrice)
FROM ticket
WHERE TicketPrice between 552 and 1302
AND AirlineID=1
AND TicketDate between '2017-01-01' and '2017-12-31'
GROUP BY TicketDate
Run Code Online (Sandbox Code Playgroud)
请问如何将两个查询同时加入并形成另一个表格
+--------------------------------++-----------
| AirlineID || Average Ticket Price 2016/2017|
+--------------------------------++-----------
Run Code Online (Sandbox Code Playgroud)
他们实际上是更多的疑问.
我目前有一个 SQL 执行脚本,它更新重复键上的行,如下所示。
$stmt = $dbCon->prepare("INSERT INTO videos_rating (videos_rating_video_fk, "
. " videos_rating_user_fk, "
. " videos_rating_rating) "
. " VALUES (:video_id, "
. " :user_id, "
. " :video_rating) "
. " ON DUPLICATE KEY UPDATE videos_rating_rating = :video_rating");
Run Code Online (Sandbox Code Playgroud)
该脚本工作正常,但有没有办法防止自动增量列不同步?
假设我们从一个空表开始,然后我对一个视频进行评分,然后创建一个 id 为 1 的行,然后用户通过对同一视频评分较低或较高来再次执行 SQL,并且该行将被更新因为它现在是重复的密钥,所以肯定没问题。
问题是这样的。
下次另一个用户对新视频进行评分时,该行将从 id 3 而不是 2 开始?
表格将如下所示
id | videos_rating_user_fk | videos_rating_rating
1 | 1 | 4
3 | 2 | 5
Run Code Online (Sandbox Code Playgroud)
我无法找到类似的问题,即使我发现其他人不太可能对此感到困扰,如果是这样,请让我参考那篇文章。
我知道 ids 不应该“看起来不错”,但是 ids 从 30 - 51 - …
为了比较MySQL 5.7和8.0,我使用sysbench创建了一个表.我试过了这个测试.服务器的性能完全相同因此,oltp_point_select显示出几乎相似的性能.
但是,当通过下面的测试进行组时,MySQL 8.0的性能提高了10倍.但我不知道为什么它很快.
我不知道是否可以找到MySQL 8.0发行说明.在8.0,谁会告诉我为什么分组更快?
0.表架构
CREATE TABLE `sbtest2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`k` int(11) NOT NULL DEFAULT '0',
`c` char(120) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`pad` char(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k_2` (`k`),
KEY `idx1` (`k`,`pad`)
) ENGINE=InnoDB AUTO_INCREMENT=1099289 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
Run Code Online (Sandbox Code Playgroud)
1. MySQL 5.7 服务器版本:5.7.17-log源代码分发
5.7结果
testdb 17:24:38 > select count(0),pad from sbtest2 where k between 400000 and 600000 group by pad limit 1;
+----------+-------------------------------------------------------------+
| count(0) | …Run Code Online (Sandbox Code Playgroud) 我的SQL表具有以下DDL
CREATE TABLE `new_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`family_id` int(11) NOT NULL,
`name` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
)
Run Code Online (Sandbox Code Playgroud)
我想在这个简单的表格中保留姓氏.为了做到这一点,我有一个微服务,调用者通过JSON发送家庭细节:
{
"family_id" : 1,
"names": ["name1", "name2"]
}
Run Code Online (Sandbox Code Playgroud)
id是通过MySQL的自动增量生成的.
所以上面的JSON最终会触发两个insert语句:
当新请求附带表中存在的family_id时,就会出现问题.这不应该被允许,我正在进行查询以搜索family_id是否存在.如果存在则引发异常.如何避免此查询?如果需要,可以更改表模式.如果可以添加类似"请求ID"或guid来建立每个请求的唯一性,那会没关系吗?
所有数据应该在同一个表中.
下面是一些带有一些数据的表的例子
(来自评论)我无法创建第二个表.Eveything应保存在一张桌子上.
一个是软件工程师招聘人员的朋友要我为他创建一个应用程序。
他希望能够根据技能搜索候选人的简历。
您可以想象,可能有数百种甚至数千种技能。
在表格中代表候选人的最佳方法是什么?我想skill_1,skill_2,skill_n等,但在外面有没有用得比较多的候选人n的技能。
另外,将来可能会向数据库中添加更多技能。
那么,代表候选人技能的最佳方法是什么?
@zohar的[更新],这是在架构上的第一步。任何意见?
鉴于以下简单表:
+-----+-------------+---------+----+
| id_ | match_op_id | version | p1 |
+-----+-------------+---------+----+
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 5 |
| 3 | 1 | 2 | 3 |
| 4 | 1 | 2 | 4 |
| 5 | 2 | 1 | 1 |
| 6 | 2 | 1 | 5 |
| 7 | 2 | 2 | 3 |
| 8 | 2 | …Run Code Online (Sandbox Code Playgroud) mysql ×11
sql ×4
database ×2
indexing ×2
php ×2
arrays ×1
caching ×1
innodb ×1
javascript ×1
mariadb ×1
mysql-8.0 ×1
node.js ×1
optimization ×1
performance ×1
phpmyadmin ×1
pivot ×1
regex ×1
transactions ×1