我有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']
我无法提取任何数据,我困惑于查询错误还是逻辑错误?
有人可以帮助我解决这个逻辑吗?
答案 0 :(得分:1)
您不能将=
与LIKE
子句一起使用,也没有在posts
和user_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,因为没有联接可以链接命令中的三个表。