Как сравнить данные в двух таблицах и отобразить данные из одной таблицы - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть 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']."%";

Я пытаюсь сделать это, у меня есть URLwww.xyz.com/technology

, где технология - это параметр (категория), согласно которому я буду выбирать сообщения для отображения.

Я показываю данные, где posts.category_id = categories.id AND category_name = $_GET['category']

IЯ не могу извлечь какие-либо данные, меня смущает, что мой запрос неверен или моя логика неверна?

Может ли кто-нибудь помочь мне решить эту логику?

Ответы [ 3 ]

0 голосов
/ 02 декабря 2018

Подумайте об удалении user_author из выбора, поскольку нет соединения, связывающего три таблицы в вашей команде.

0 голосов
/ 02 декабря 2018

Вы не можете использовать = с предложением 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, вы можете удалить % из запроса, это поможет mysql искать записи, если столбец categories.name имеет индекс.

0 голосов
/ 02 декабря 2018

Ваш запрос содержит = с 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']."%'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...