1

我有以下 Mysql 查询,我试图运行左连接来定义带有图像表的页面表。

$query = mysql_query("SELECT * FROM pages
                    WHERE `fname` LIKE '%$fname%' AND `lname` LIKE '%$lname%' AND `city` LIKE '%$citysearch%' AND `state` LIKE '%$statesearch%' AND `activities` LIKE '%$locationsearch%' AND `startyr` LIKE '%$startyearsearch%' AND `endyr` LIKE '%$endyearsearch%'
                     LEFT JOIN `images.pgname` WHERE `pages.pgname` = 'images.pgname' LIMIT $start, $perpage
                ");

我得到“警告:mysql_fetch_assoc() 期望参数 1 是资源,第 72 行给出的布尔值”

我想要做的是将页面表与图像表连接起来。pages 表有以下字段:fname、lname、city、state、activity、startyr、endyr、pgname

并且 images 表有以下字段:pgname, id, imageUrl, username

我想要做的是返回 pages.pgname 等于 images.pgname 的所有图像,并使用 imageUrl 返回图像的 URL。

欢迎任何和所有帮助!

4

1 回答 1

2

看起来您正在尝试加入“images.pgname”列?您只能连接完整的表。此外,JOIN 必须在 WHERE 子句之前。

现在,让我们解读一下这个过程:如果您需要从多个表中选择值,您首先列出您想要选择的所有值。在这种情况下,即 a) 来自页面 ( pages.*) 的所有列和 b) 来自图像 ( ) 的 imageUrl images.imageUrl

SELECT pages.*, images.imageUrl

然后像往常一样指定要从中选择的表:

FROM pages

然后你做连接。左连接意味着,数据库将尝试在另一个表(图像)中找到相应的行。该行不一定实际存在。但是,您可以通过指定表和定义连接的条件来执行连接:

LEFT JOIN images ON pages.pgname = images.pgname

其余的保持不变:

WHERE pages.fname LIKE '%$fname%' AND pages.lname LIKE '%$lname%' AND pages.city LIKE '%$citysearch%' AND pages.state LIKE '%$statesearch%' AND pages.activities LIKE '%$locationsearch%' AND pages.startyr LIKE '%$startyearsearch%' AND pages.endyr LIKE '%$endyearsearch%'
LIMIT $start, $perpage

但是,如果每页有多个图像,则需要以相反的方式加入:

SELECT pages.*, images.imageUrl
FROM images
JOIN pages ON pages.pgname = images.pgname
WHERE ...
于 2012-10-23T20:26:57.050 回答