我有以下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。
欢迎任何和所有帮助!
答案 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 ...