SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有误;查看与您的 MariaDB 对应的手册
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB
我在 Laravel 8
中收到此错误
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '*)
这就是我尝试进行查询的方式
$totalCitasGenero = DB::table('citas')->selectRaw('idEspecialidad, genero, count (*) as totalCitas')->join('personas', 'personas.id', '=', 'citas.idPersonaP')->groupBy('idEspecialidad','genero')->get();
这是我的表格的样子
CREATE TABLE `personas` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(50) NOT NULL,
`apellido` varchar(50) NOT NULL,
`cedula` varchar(10) NOT NULL,
`email` varchar(40) DEFAULT NULL,
`telefono` varchar(13) DEFAULT NULL,
`direccion` varchar(100) NOT NULL,
`ciudadResi` varchar(50) NOT NULL,
`fechaNacimiento` date NOT NULL,
`genero` varchar(100) NOT NULL,
`estado` binary(1) NOT NULL,
`idTipoPersona` int(11) NOT NULL,
`idPersona` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `personas_FK` (`idTipoPersona`),
KEY `personas_FK_1` (`idPersona`),
CONSTRAINT `personas_FK` FOREIGN KEY (`idTipoPersona`) REFERENCES `tipo_personas` (`id`),
CONSTRAINT `personas_FK_1` FOREIGN KEY (`idPersona`) REFERENCES `personas` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8mb4
CREATE TABLE `citas` (
`idPersonaD` int(11) NOT NULL,
`idPersonaP` int(11) NOT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
`fecha` date NOT NULL,
`hora` time NOT NULL,
`idEspecialidad` int(11) NOT NULL,
`estado` int(11) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
KEY `citas_FK` (`idPersonaD`),
KEY `citas_FK_1` (`idPersonaP`),
KEY `citas_FK_2` (`idEspecialidad`),
CONSTRAINT `citas_FK` FOREIGN KEY (`idPersonaD`) REFERENCES `personas` (`id`),
CONSTRAINT `citas_FK_1` FOREIGN KEY (`idPersonaP`) REFERENCES `personas` (`id`),
CONSTRAINT `citas_FK_2` FOREIGN KEY (`idEspecialidad`) REFERENCES `especialidades` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=88 DEFAULT CHARSET=utf8mb4
在 DBeaver 上查询工作正常,这就是它的样子
select idEspecialidad, genero, count (*) as totalCitas
from citas as c join personas
where c.idPersonaP = personas.id
group by genero, idEspecialidad ;
我期待的结果就是下图中的结果。
将查询翻译成 Laravel 有什么问题?
如果我在将 ->get() 切换为 toSql() 之后对变量进行添加 -> 按照建议我得到了这个结果
"select idEspecialidad, genero, count (*) as totalCitas from `citas` inner join `personas` on `personas`.`id` = `citas`.`idPersonaP` group by `idEspecialidad`, `genero`
我什至尝试再次将查询复制到 DBeaver 中,它工作正常,它只是在 Laravel 中不起作用,不知道为什么。
查询看起来不错,所以我不知道为什么在这种情况下它不起作用。
尝试删除 count (*)
中的白色 space
$totalCitasGenero = DB::table('citas')->selectRaw('idEspecialidad, genero, count(*) as totalCitas')->join('personas', 'personas.id', '=', 'citas.idPersonaP')->groupBy('idEspecialidad','genero')->get();
我在 Laravel 8
中收到此错误SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '*)
这就是我尝试进行查询的方式
$totalCitasGenero = DB::table('citas')->selectRaw('idEspecialidad, genero, count (*) as totalCitas')->join('personas', 'personas.id', '=', 'citas.idPersonaP')->groupBy('idEspecialidad','genero')->get();
这是我的表格的样子
CREATE TABLE `personas` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(50) NOT NULL,
`apellido` varchar(50) NOT NULL,
`cedula` varchar(10) NOT NULL,
`email` varchar(40) DEFAULT NULL,
`telefono` varchar(13) DEFAULT NULL,
`direccion` varchar(100) NOT NULL,
`ciudadResi` varchar(50) NOT NULL,
`fechaNacimiento` date NOT NULL,
`genero` varchar(100) NOT NULL,
`estado` binary(1) NOT NULL,
`idTipoPersona` int(11) NOT NULL,
`idPersona` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `personas_FK` (`idTipoPersona`),
KEY `personas_FK_1` (`idPersona`),
CONSTRAINT `personas_FK` FOREIGN KEY (`idTipoPersona`) REFERENCES `tipo_personas` (`id`),
CONSTRAINT `personas_FK_1` FOREIGN KEY (`idPersona`) REFERENCES `personas` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8mb4
CREATE TABLE `citas` (
`idPersonaD` int(11) NOT NULL,
`idPersonaP` int(11) NOT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
`fecha` date NOT NULL,
`hora` time NOT NULL,
`idEspecialidad` int(11) NOT NULL,
`estado` int(11) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
KEY `citas_FK` (`idPersonaD`),
KEY `citas_FK_1` (`idPersonaP`),
KEY `citas_FK_2` (`idEspecialidad`),
CONSTRAINT `citas_FK` FOREIGN KEY (`idPersonaD`) REFERENCES `personas` (`id`),
CONSTRAINT `citas_FK_1` FOREIGN KEY (`idPersonaP`) REFERENCES `personas` (`id`),
CONSTRAINT `citas_FK_2` FOREIGN KEY (`idEspecialidad`) REFERENCES `especialidades` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=88 DEFAULT CHARSET=utf8mb4
在 DBeaver 上查询工作正常,这就是它的样子
select idEspecialidad, genero, count (*) as totalCitas
from citas as c join personas
where c.idPersonaP = personas.id
group by genero, idEspecialidad ;
我期待的结果就是下图中的结果。
将查询翻译成 Laravel 有什么问题?
如果我在将 ->get() 切换为 toSql() 之后对变量进行添加 -> 按照建议我得到了这个结果
"select idEspecialidad, genero, count (*) as totalCitas from `citas` inner join `personas` on `personas`.`id` = `citas`.`idPersonaP` group by `idEspecialidad`, `genero`
我什至尝试再次将查询复制到 DBeaver 中,它工作正常,它只是在 Laravel 中不起作用,不知道为什么。
查询看起来不错,所以我不知道为什么在这种情况下它不起作用。
尝试删除 count (*)
$totalCitasGenero = DB::table('citas')->selectRaw('idEspecialidad, genero, count(*) as totalCitas')->join('personas', 'personas.id', '=', 'citas.idPersonaP')->groupBy('idEspecialidad','genero')->get();