左边用LIKE和逻辑AND加入PHP / SQL

时间:2012-10-23 20:22:17

标签: php mysql

我有以下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,activities,startyr,endyr,pgname

图像表包含以下字段: pgname,id,imageUrl,username

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

欢迎任何和所有帮助!

1 个答案:

答案 0 :(得分:2)

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

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