所以当我想添加外键时出现错误。我在带有EER图模型的MySQL Workbench中添加了外键。工作台尝试添加的行是:
CREATE SCHEMA IF NOT EXISTS `barberDB` DEFAULT CHARACTER SET latin1 ;
USE `barberDB` ;
-- -----------------------------------------------------
-- Table `barberDB`.`BARBER`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `barberDB`.`BARBER` (
`ID` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
PRIMARY KEY (`ID`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `barberDB`.`CUSTOMER`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `barberDB`.`CUSTOMER` (
`ID` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
`isHaircut` INT NULL,
`isBeard` INT NULL,
`isEyebrows` INT NULL,
`BARBER_ID` INT NOT NULL,
PRIMARY …
Run Code Online (Sandbox Code Playgroud) 我有以下模型:1-用户模型
/**
* Define user and functional area relationship
*/
public function functionalAreas()
{
return $this->belongsToMany('App\FunctionalArea', 'user_functional_areas', 'user_id', 'functional_area_id')->withPivot('id', 'is_primary')->withTimestamps();
}
Run Code Online (Sandbox Code Playgroud)
和商业模式:
/**
* Define business and user functional area relationship
*/
public function functionalAreas()
{
return $this->belongsToMany('App\FunctionalArea', 'business_functional_areas', 'business_id', 'functional_area_id')->withTimestamps();
}
Run Code Online (Sandbox Code Playgroud)
现在我应该将所有企业和用户显示在一个列表中,为此我使用来自 union,以下是我的查询:
public function usersAndOrganizations()
{
$users = $this->users();
$organizations = $this->organizations();
$invitees = $users->union($organizations)->paginate(10);
return response()->json($invitees);
}
private function users()
{
$users = User::byState($approved = true, 'is_approved')
->search()->select([
'id',
DB::raw("CONCAT(first_name, ' ', last_name) AS name"),
'about',
'address', …
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚为什么查询在我的MySQL数据库上这么慢.我已经阅读了有关MySQL性能,各种SO问题的各种内容,但这对我来说仍然是个谜.
除了answer_text之外,我在所有列上都有索引
我正在运行的查询是:
SELECT answer_id, COUNT(1)
FROM answers_onsite a
WHERE a.screen_id=384
AND a.timestamp BETWEEN 1462670000000 AND 1463374800000
GROUP BY a.answer_id
Run Code Online (Sandbox Code Playgroud)
此查询大约需要20-30秒,然后给出结果集:
任何见解?
编辑
如我所知,我的节目创建表:
CREATE TABLE 'answers_onsite' (
'id' bigint(20) unsigned NOT NULL AUTO_INCREMENT,
'device_id' bigint(20) unsigned NOT NULL,
'survey_id' bigint(20) unsigned NOT NULL,
'answer_set_group' varchar(255) NOT NULL,
'timestamp' bigint(20) unsigned NOT NULL,
'screen_id' bigint(20) unsigned NOT NULL,
'answer_id' bigint(20) unsigned NOT NULL DEFAULT '0',
'answer_text' text,
PRIMARY KEY ('id'),
KEY 'device_id' ('device_id'), …
Run Code Online (Sandbox Code Playgroud) 由于 MySQL 8.0 已弃用 utf8mb3(并且将来将完全删除 utf8mb3 支持),因此在没有(或最少)停机时间的情况下将完整数据库(生产中)从 utf8mb3 (utf-8) 升级/转换为 utf8mb4 的正确方法是什么?
问题不在于转换,我知道存在多个用于此转换的脚本。我主要担心的是停机时间。是否可以在不停机的情况下实现这一目标?
我遇到了一些我不确定如何处理的事情。我正在构建一个数据库来存储关于运动卡的信息,当我想查看某些卡片时,我在排序时遇到了一些问题。
作为背景,每张卡片(数据库中的行)都有关于年份的信息,设置卡片来自,卡片上的玩家和卡片号码(还有更多的信息,但这就是所有相关的信息)。当我看到结果时,我希望按年份排序,然后是设置,然后是玩家,然后是卡号。除了卡号之外的所有东西都工作正常,因为年份只是一个整数,并且 set 和 player 都是 varchars,所以很容易对它们进行排序。但是,卡号是我遇到的一些问题。
卡号列是一个 varchar,因为卡号可以包括字母、数字和破折号。最常见的卡号是直数(即 1、2、3、4、5)、直字母(Ex-A、Ex-B、Ex-C)、数字后跟字母(1a、1b , 2, 3a, 3b, 3c),或后跟数字的字母(A1、A2、A3、A4、A5)。这是我目前设置 SQL 字符串的排序部分的方式:
order by year desc, cardset asc, subset asc, cast(cardNum as unsigned) asc;
Run Code Online (Sandbox Code Playgroud)
这可以很好地处理大多数事情。但是我遇到的问题是,当一组卡的卡号中有相同的字母,然后有一个数字时。我希望排序基本上忽略前导字母,然后按数字排序。但是,有时它不会正确执行此操作,特别是当有超过 5 张卡片需要排序时。
具体来说,它错误地将具有以下卡号的某些卡按以下顺序排序:
什么时候应该导致:
它目前正在对直数或后跟字母的数字进行正确排序(即 1、2、3、4、5 或 1、2、3a、3b、4、5a、5b)。我不知道它不正确地对直字母进行排序有任何问题,但我目前也有很少的测试用例,所以我不确定它是否是 100%。
除了不知道如何在不弄乱其他排序的情况下修改我的 SQL 排序语句之外,我真的不知道它是如何得出上面 BCP 示例的顺序的。关于如何纠正它的任何想法?我想尝试忽略卡号中的字母,直到我们得到数字,但这会导致卡号中只有字母的卡出现重大问题。所以我有点卡住了。
绝对最坏最坏,我可能会将卡号列分成 2 个不同的列,一个用于更具描述性的部分,另一个用于我想要排序的部分。这可能最终会正常工作,但需要大量工作才能恢复正常!
编辑 - 这里有一些更多信息,包括我的数据库中的数据(抱歉格式化,不知道如何在此处制作表格):
| year | cardSet | subset | cardNum |
| 2016 | Bowman | | 52 |
| 2016 | Bowman | …
Run Code Online (Sandbox Code Playgroud) 我正在使用Microsoft SQL Server 2012,我有这个查询(如下).它正确返回所有内容,但我无法弄清楚如何只返回第4行.
我知道如何使用简单的查询来完成它,但是使用查询这个复杂的我不知道如何只返回第4行.由于我使用的是MS SQL Server,因此无法使用Limit/Offset.如何以及在何处放置代码以仅打印第4行?我很难过.谢谢.
SELECT T.[First Name],
T.[Last Name],
T.[Middle Name],
T.[Country Name],
T.[Designation Name],
Salary.Emp_Salary AS 'Current Salary'
FROM
(
SELECT
Emp_First_Name AS "First Name",
Emp_Last_Name AS "Last Name",
Emp_Middle_Name AS "Middle Name",
Country_Name AS "Country Name",
Desig_Name as "Designation Name",
MAX(Emp_Salary_Change_Year) AS "Time"
FROM Employee_Details
INNER JOIN Country ON Employee_Details.Emp_Country_Id = Country.Country_Id
INNER JOIN State ON Employee_Details.Emp_State_Id = State.State_Id
INNER JOIN Designation ON Employee_Details.Desig_Id = Designation.Desig_Id
INNER JOIN Salary ON Employee_Details.Emp_Id = Salary.Emp_Id
GROUP BY …
Run Code Online (Sandbox Code Playgroud) 我有两张桌子:
ranking_history
| user_id | ranking | time
| 1 | 2 | 2018-05-21
| 1 | 5 | 2018-04-28
| 2 | 9 | 2018-05-21
| 2 | 1 | 2018-04-28
Run Code Online (Sandbox Code Playgroud)
用户
| id | ranking
| 1 | 7
| 2 | 3
Run Code Online (Sandbox Code Playgroud)
我需要连接这两个表来生成一个如下所示的表:
| id | ranking | last_weeks_ranking | last_months_ranking
| 1 | 7 | 2 | 5
| 2 | 3 | 9 | 1
Run Code Online (Sandbox Code Playgroud)
这就是我尝试过的:
SELECT *, r1.ranking as last_weeks_ranking, r2.ranking as last_months_ranking
from …
Run Code Online (Sandbox Code Playgroud) 如何使用PHP和mysqli在MySQL中连接两个表?
我有两张桌子:checkin
和checkout
.我试图将两个表合并为一个条件.
这是我的表结构:
报到
userid currentdate currenttime
60 08-03-2018 03:10
60 08-03-2018 05:50
60 08-03-2018 08:20
20 08-03-2018 01:04
60 09-03-2018 11:23
20 09-03-2018 10:24
Run Code Online (Sandbox Code Playgroud)
查看
userid currentdate currenttime
60 08-03-2018 04:05
60 08-03-2018 06:10
60 08-03-2018 09:25
20 08-03-2018 07:30
60 09-03-2018 12:30
Run Code Online (Sandbox Code Playgroud)
我希望得到这样的结果:
Result
Userid Date Time
60 08-03-2018 In:03:10 Out:04:05
In:05:50 Out:06:10
In:08:20 Out:09:25
20 08-03-2018 In:01:04 Out:07:30
60 09-03-2018 In:11:23 Out:12:30
20 09-03-2018 In:10:24
Run Code Online (Sandbox Code Playgroud)
这是PHP代码:
<?php
include 'db.php'; …
Run Code Online (Sandbox Code Playgroud)