如何比较两个表中的数据并显示一个表中的数据

时间:2018-12-02 12:56:07

标签: mysql sql join

我有2个具有以下结构的表:

categories
    id
    status
    name
    created
posts
    id
    status
    category_id
    title
    excerpt
    featured_image
    created
user_authors
    id
    status
    author_name
    created

我正在使用以下查询:

$query = "SELECT posts.id, posts.category_id, user_authors.author_name, posts.user_author_id, posts.title, posts.post_slug, posts.featured_image, posts.excerpt, posts.created FROM posts, user_authors INNER JOIN categories ON(posts.category_id = categories.id) WHERE posts.status = 1 AND categories.name LIKE = %".$_GET['category']."%";

我想做的是,我有一个网址www.xyz.com/technology

技术是一个参数(类别),根据该参数,我将选择要显示的帖子。

我正在显示数据posts.category_id = categories.id AND category_name = $_GET['category']

我无法提取任何数据,我困惑于查询错误还是逻辑错误?

有人可以帮助我解决这个逻辑吗?

3 个答案:

答案 0 :(得分:1)

您不能将=LIKE子句一起使用,也没有在postsuser_authors表之间编写任何关系。

正确的查询应该是:

$query = "SELECT posts.id, posts.category_id, user_authors.author_name, posts.user_author_id, posts.title, posts.post_slug, posts.featured_image, posts.excerpt, posts.created FROM posts INNER JOIN user_authors ON (user_authors.id = posts.user_author_id) INNER JOIN categories ON (posts.category_id = categories.id) WHERE posts.status = 1 AND categories.name LIKE '%".$_GET['category']."%'";

如果仅查找一个categories.name,则可以从查询中删除%,如果categories.name列具有索引,这将有助于mysql搜索记录。

答案 1 :(得分:0)

您的查询中有一个=和一个LIKE,在mysql中是不正确的。正确的方法应该是

categories.name LIKE '%". $_GET['category']."%'"

请注意,我们删除了=,并用'括起来


编辑:

根据您的回复,新查询应如下所示。

SELECT posts.id, posts.category_id, user_authors.author_name, posts.user_author_id, posts.title, posts.post_slug, posts.featured_image, posts.excerpt, posts.created 
FROM posts INNER JOIN categories ON posts.category_id = categories.id
INNER JOIN user_authors ON posts.id = user_authors.id 
WHERE posts.status = 1 AND categories.name LIKE '%".$_GET['category']."%'"

答案 2 :(得分:0)

请考虑从选择中删除user_author,因为没有联接可以链接命令中的三个表。