Php 进行了一个艰难的sql请求,以查找图片的赞数

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_

我的数据库中有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_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
表格是否有任何匹配记录<代码>内部联接
将仅返回匹配的记录。