我想获取带有特定类别和图像链接的wordpress帖子。
如您所知,当post_type = attachment
时,图像链接保存到GUID列中的数据库。
和帖子的ID
和post_parent
是相同的。
现在,我想获取帖子并将guid列加入相同的ID
。
当我添加内部联接以合并附件和帖子时,出现错误!
如果您知道我可以通过每种帖子的特定类别和图片链接来获取帖子的方式,请帮助我。
这是我的代码:
SELECT
*
FROM
wp_posts p,
wp_postmeta m,
wp_terms t,
wp_term_taxonomy tt,
wp_term_relationships tr,
wp_terms t2,
wp_term_taxonomy tt2,
wp_term_relationships tr2
LEFT JOIN wp_posts AS p2
ON
p.ID = p2.post_parent
WHERE
p.post_type = 'post' AND p.post_status = 'publish'
AND p.ID = tr.object_id
AND t.term_id = tt.term_id
AND tr.term_taxonomy_id = tt.term_taxonomy_id
AND tt.taxonomy = 'category'
AND tt.term_id = t.term_id
AND t.name = 'Fashion'
GROUP BY
p.ID
ORDER BY
id
DESC
MySQL said:
#1054 - Unknown column 'p.ID' in 'on clause'
答案 0 :(得分:0)
我怀疑问题是由于将旧式逗号语法与较新的JOIN关键字混用了。
MySQL参考手册的相关摘录:
在没有连接条件的情况下,
INNER JOIN
和,
(逗号)在语义上等效:都在指定的表之间产生笛卡尔积(即,第一个表中的每一行都是连接到第二个表中的每一行。但是,逗号运算符的优先级小于
INNER JOIN
,CROSS JOIN
,LEFT JOIN
等。如果在存在联接条件时将逗号联接与其他联接类型混合使用,则可能会出现“ on子句”中形式为“未知列” col_name”的错误。本节稍后将提供有关解决此问题的信息。
避免此问题的最简单方法是放弃联接操作的旧式语法,改为使用JOIN
关键字。
(非常高兴的是,逗号语法仍然有效,以提供与现有SQL的向后兼容性。但是,没有充分的理由新的开发人员应该使用逗号语法。)
除此之外,还有一些重大的岩石问题仍然困扰着我。
似乎缺少很多加入条件
在开发中的SELECT列表中使用*
可能是有用的快捷方式,但是我们通常会列出需要返回的表达式,尤其是当我们想从多个表中返回id
列时,我们喜欢将列别名分配给狂热的重复列名。
依靠对GROUP BY的非标准扩展名(当only_full_group_by
中省略sql_mode
时,返回折叠后的组中“某”行中的值
在我看来,所有这些看起来都是严重的问题。
我们可以重新编写OP查询以使用JOIN
关键字代替逗号语法,并将条件重新定位到ON
子句,这突出显示了缺少联接条件的情况:
SELECT *
FROM wp_posts p
JOIN wp_postmeta m
-- ON ???
JOIN wp_terms t
ON t.name = 'Fashion'
JOIN wp_term_taxonomy tt
ON tt.term_id = t.term_id
AND tt.taxonomy = 'category'
JOIN wp_term_relationships tr
ON tr.object_id = p.id
AND tr.term_taxonomy_id = tt.term_taxonomy_id
JOIN wp_terms t2
-- ON ???
JOIN wp_term_taxonomy tt2
-- ON ???
JOIN wp_term_relationships tr2
-- ON ??
LEFT
JOIN wp_posts AS p2
ON p2.post_parent = p.id
WHERE p.post_type = 'post'
AND p.post_status = 'publish'
GROUP
BY p.id
ORDER
BY p.id DESC
在这里我们将省略任何连接条件,并且仅将所有行与所有其他行进行匹配的地方,那么我的偏好是包括(可选)CROSS
关键字,以帮助将来的读者发信号省略联接条件是设计使然,而不是疏忽。