小编Pau*_*gel的帖子

使用MySQL Workbench添加外键时出现MySQL错误1064

所以当我想添加外键时出现错误。我在带有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)

mysql sql mysql-workbench

8
推荐指数
2
解决办法
9042
查看次数

工会中的 Laravel 关系冲突

我有以下模型: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)

php mysql laravel eloquent laravel-6

8
推荐指数
1
解决办法
560
查看次数

在具有3500万行的mysql表上查询非常慢

我试图弄清楚为什么查询在我的MySQL数据库上这么慢.我已经阅读了有关MySQL性能,各种SO问题的各种内容,但这对我来说仍然是个谜.

  1. 我正在使用MySQL 5.6.23-log - MySQL社区服务器(GPL)
  2. 我有一张大约3500万行的表.
  3. 该表被插入约5次/秒
  4. 该表如下所示: 在此输入图像描述

  5. 除了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

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

在不停机的情况下将完整数据库从 utf8mb3 (utf-8) 转换为 utf8mb4 的正确方法是什么?

由于 MySQL 8.0 已弃用 utf8mb3(并且将来将完全删除 utf8mb3 支持),因此在没有(或最少)停机时间的情况下将完整数据库(生产中)从 utf8mb3 (utf-8) 升级/转换为 utf8mb4 的正确方法是什么?

问题不在于转换,我知道存在多个用于此转换的脚本。我主要担心的是停机时间。是否可以在不停机的情况下实现这一目标?

mysql

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

当列可以以字母开头或结尾时,使用 MySQL 对 varchar 列进行数字排序并强制转换为无符号

我遇到了一些我不确定如何处理的事情。我正在构建一个数据库来存储关于运动卡的信息,当我想查看某些卡片时,我在排序时遇到了一些问题。

作为背景,每张卡片(数据库中的行)都有关于年份的信息,设置卡片来自,卡片上的玩家和卡片号码(还有更多的信息,但这就是所有相关的信息)。当我看到结果时,我希望按年份排序,然后是设置,然后是玩家,然后是卡号。除了卡号之外的所有东西都工作正常,因为年份只是一个整数,并且 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 张卡片需要排序时。

具体来说,它错误地将具有以下卡号的某些卡按以下顺序排序:

  • BCP61
  • BCP97
  • BCP32
  • BCP135

什么时候应该导致:

  • BCP32
  • BCP61
  • BCP97
  • BCP135

它目前正在对直数或后跟字母的数字进行正确排序(即 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)

mysql sql sorting natural-sort

3
推荐指数
1
解决办法
691
查看次数

获取第四行查询结果

我正在使用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)

sql-server rows

2
推荐指数
1
解决办法
65
查看次数

减少同一个表上的连接数

我有两张桌子:

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)

mysql pivot join

0
推荐指数
1
解决办法
51
查看次数

如何使用PHP和mysqli在MySQL中连接两个表

如何使用PHPmysqli在MySQL中连接两个表?

我有两张桌子:checkincheckout.我试图将两个表合并为一个条件.

这是我的表结构:

报到

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)

php mysql sql join

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