Php 进行了一个艰难的sql请求,以查找图片的赞数
我的数据库中有3个表: 用户,pic,如用以下材料制成:Php 进行了一个艰难的sql请求,以查找图片的赞数,php,mysql,sql,Php,Mysql,Sql,我的数据库中有3个表: 用户,pic,如用以下材料制成: CREATE TABLE IF NOT EXISTS `user` ( `id` int(10) NOT NULL auto_increment, `email` varchar(255), `login` varchar(255), `password` varchar(255), `admin` boolean, `pwreset` boolean, `validate_
CREATE TABLE IF NOT EXISTS `user` (
`id` int(10) NOT NULL auto_increment,
`email` varchar(255),
`login` varchar(255),
`password` varchar(255),
`admin` boolean,
`pwreset` boolean,
`validate_link` varchar(255),
`created_at` date, PRIMARY KEY( `id` )
);
CREATE TABLE IF NOT EXISTS `pic` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(255),
`owner_id` int(11) NOT NULL,
`created_at` date,
PRIMARY KEY( `id` )
);
CREATE TABLE IF NOT EXISTS `like` (
`id` int(10) NOT NULL auto_increment,
`owner_id` int(11) NOT NULL,
`pic_id` int(11) NOT NULL,
`created_at` date,
PRIMARY KEY( `id` )
);";
我试图获取我的照片,并通过照片的所有者id登录
我做了这个:
$find_pic = $db->prepare("SELECT p.*, u.login FROM camagru_jgengo.pic as p INNER JOIN camagru_jgengo.user as u ON p.owner_id = u.id ORDER BY p.id DESC ");
$find_pic->execute();
$pics = $find_pic->fetchAll();
输出为:
[0] => Array
(
[id] => 189
[0] => 189
[name] => 1492882407.png
[1] => 1492882407.png
[owner_id] => 1
[2] => 1
[created_at] => 2017-04-22
[3] => 2017-04-22
[login] => jgengo
[4] => jgengo
)
...
现在,我想在这个数组中有一个新信息,比如:
$pics[x][likes\u count]
这是使用like.pic\u id
和此pic.id
我试过:
$find_pic = $db->prepare("SELECT p.*, u.login, l.like FROM camagru_jgengo.pic as p INNER JOIN camagru_jgengo.user as u ON p.owner_id = u.id INNER JOIN camagru_jgengo.like as l.pic_id = p.id ORDER BY p.id DESC ");
$find_pic->execute();
$pics = $find_pic->fetchAll();
但是它不起作用,有人能帮我吗?这个查询是错误的
SELECT
p.*, u.login, l.like
FROM
camagru_jgengo.pic as p
INNER JOIN
camagru_jgengo.user as u ON p.owner_id = u.id
INNER JOIN
camagru_jgengo.like as l.pic_id = p.id
ORDER BY
p.id DESC
l.picu id
您尚未定义什么是l
因此,应将其更正为
SELECT
p.*, u.login, l.like
FROM
camagru_jgengo.pic as p
INNER JOIN
camagru_jgengo.user as u ON p.owner_id = u.id
INNER JOIN
camagru_jgengo.like as l ON l.pic_id = p.id
ORDER BY
p.id DESC
我成功地做到了:
SELECT p.*, u.login, count(l.pic_id) as likes
FROM camagru_jgengo.pic as p
LEFT JOIN camagru_jgengo.user as u ON p.owner_id = u.id
LEFT JOIN camagru_jgengo.like as l ON l.pic_id = p.id
GROUP BY p.id
ORDER BY p.id DESC;
谢谢大家 “不行”到底是什么意思?是否有错误消息?请使用换行符格式化查询。这样查找语法错误就不会太难了。如果我这样写:
$find_pic=$db->prepare(“选择p.*,u.login,l.owner_id FROM camagru_jgengo.pic as p internal JOIN camagru_jgengo.user as u ON p.owner_id=u.id internal JOIN camagru__jgengo.like as l ON l.pic_id=p.id ORDER BY p.id DESC”)代码>$find_pic是空的我试过了:$find_pic=$db->prepare(“选择p.*,u.login,l.owner_id从camagru_jgengo.pic作为p内部连接camagru_jgengo.user作为p上的u.owner_id=u.id内部连接camagru__jgengo.like作为l在l.pic__id=p.id按p.id描述订购”)代码>但它什么也得不到。我的数组为空。您是否直接在mysql客户端上尝试了查询?它返回了什么?mysql>选择p.*,u.login,l.owner\u id FROM camagru\u jgengo.pic as p internal JOIN camagru\u jgengo.user as u ON p.owner\u id=u.id internal JOIN camagru\u jgengo.like as l ON l.pic\u id=p.id ORDER BY p.id DESC代码>空集(0.00秒)是否确定like
表格和pic
表格是否有任何匹配记录<代码>内部联接
将仅返回匹配的记录。