Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > WordPress и другие CMS
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2014, 16:33   #1
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию Как в Wordpress SQL запросом SELECT вывести все посты категории?

В старых версиях базы было поле category, а сейчас в таблицах wp_term_relationships, wp_term_taxonomy
нужно разбираться в отношениях и строить сложный запрос

может кто уже писал такой код?
Alar вне форума Ответить с цитированием
Старый 13.12.2014, 18:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А SDK на этот счет нет? Спецификаций или хотя бы пояснений в доработках?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.12.2014, 20:20   #3
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Вот так вот в новой базе вроде как отношения.

Я знаю term_id в таблице wp_terms - по нему нужно получить все ID в таблице wp_post

Задача простая, особенно если учитывать что в старом моем скрипте в term_id были в таблице wp_post

А теперь разработчики добавили кучу таблиц посредников. И код надо переписывать.
Изображения
Тип файла: jpg working-with-data-in-wordpress-terms-table-and-related-tables.jpg (27.1 Кб, 124 просмотров)
Alar вне форума Ответить с цитированием
Старый 13.12.2014, 20:30   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Таблица posts связана с таблицей terms последовательно через таблицы term_relationships и term_taxonomy.
Поэтому, для получения всех записей в рубрике нужен inner join из 4х таблиц.
Streletz вне форума Ответить с цитированием
Старый 14.12.2014, 17:31   #5
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Хорошо. попытаюсь понять логику.

Код:
SELECT *
FROM `wp_posts`
Inner JOIN `wp_terms`
WHERE `wp_terms`.`term_id` =362
Что-то начало выводить. но мало. не все. и как работает локига этого запроса и как его усложнить чтобы работало с выводом всех записей?
Alar вне форума Ответить с цитированием
Старый 14.12.2014, 17:43   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Скорее так:
Код:
select wp_posts.*
from wp_posts wp
inner join wp_term_relationship wtr on wtr.object_id=wp.id
inner join wp_term_taxonometry wtt on wtt.term_taxonometry_id=wtr.term_taxonometry_id
inner join wp_terms wts on wts.term_id=wtt.term_id
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2014, 17:50   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Код:
Inner JOIN `wp_terms`
Разве так можно join'ить? Вроде ж надо указывать по каким полям, типа так:
Код:
Inner JOIN wp_term_relationships ON wp_term_relationships.object_id = wp_posts.ID
Нет вордпреса под рукой, но вот пример запроса http://stackoverflow.com/a/8280431/964478, так что предположу, что надо так:
Код:
SELECT *
FROM wp_posts AS p
INNER JOIN wp_term_relationships AS tr ON p.ID = tr.object_id
INNER JOIN wp_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN wp_terms AS t ON tt.term_id = t.term_id
WHERE t.term_id = 362
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.12.2014, 18:00   #8
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Так ребята. смотрите. я понял в чем косяк и многие на нем уже пролетают. так как вот такой код я взял из сети и он не работал. потому что не отработано еще соотношение. и у меня самостоятельно не отрабатывалось так как в голове логически до сих пор нет понятия как же все таки Join работает.

Код:
SELECT * 
FROM `wp_posts`
LEFT JOIN `wp_term_relationships`
ON `wp_posts`.`ID` = `wp_term_relationships`.`object_id` 
WHERE `wp_term_relationships`.`term_taxonomy_id` = 5
смотрите аттач.
на больших числах это соотношение разбегается и ранее рабочий казалось бы код не работает, потому что не хватает еще одного соотношения


term_taxonomy_id не равно term_id в таблице terms - отсюда много логических ошибок заклывалось в код.

И потому прежде чем делать любые запросы нужно получается по term_id получить term_taxonomy_id - по мне так это селектом проще. как join делать - нет пока понимания в голове

Вот такой вот дополнительный Select понадобился.

Код:
SELECT term_taxonomy_id
FROM `wp_term_taxonomy`
Where `term_id`=362
И далее запрос по slug

Код:
SELECT term_taxonomy_id
FROM `wp_term_taxonomy`
WHERE `term_id` = (
SELECT term_id
FROM wp_terms
WHERE slug = 'zapchasti' )
И только потом SQL запрос на получение всех постов в категории Wordpress по слугу (slug) выглядит так!

Код:
SELECT *
FROM `wp_posts`
LEFT JOIN `wp_term_relationships` ON `wp_posts`.`ID` = `wp_term_relationships`.`object_id`
WHERE `wp_term_relationships`.`term_taxonomy_id` = (
SELECT term_taxonomy_id
FROM `wp_term_taxonomy`
WHERE `term_id` = (
SELECT term_id
FROM wp_terms
WHERE slug = 'zapchasti' ) )
Осталось лишь убедится что все охватывает. так как теперь ничего лишнего нет

Для понимания логики базы данных wordpress обратите внимание как храняться slug - их может быть несколько с разным типом. Вот отсюда и идет расхождение в цифрах. прикрепил в аттаче.

Обязательно ставьте нужный AND

вот так у меня. так как ошибок не будет только в самой простой базе. где не повторяются slug
Код:
SELECT term_taxonomy_id
FROM `wp_term_taxonomy`
WHERE `term_id` = (
SELECT term_id
FROM wp_terms
WHERE slug = 'zapchasti' )
AND taxonomy='wpsc_product_category'
И пройтись по массиву ID - http://www.programmersforum.ru/showthread.php?t=270254 выполнив необходимые команды с постами или метой постов.
Изображения
Тип файла: jpg term_taxonomy_id и Term_id одинаковые.jpg (36.7 Кб, 123 просмотров)
Тип файла: jpg term_taxonomy_id и Term_id разбежались.jpg (32.6 Кб, 132 просмотров)
Тип файла: jpg slug in wordpress.jpg (37.3 Кб, 129 просмотров)

Последний раз редактировалось Stilet; 14.12.2014 в 19:59.
Alar вне форума Ответить с цитированием
Старый 14.12.2014, 18:25   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Дык по-моему эти 2 селекта эквивалентны моему и стилетовскому запросам с join'ами.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 14.12.2014 в 18:28.
Alex11223 вне форума Ответить с цитированием
Старый 14.12.2014, 18:38   #10
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Дык по-моему эти 2 селекта эквивалентны моему и стилетовскому запросам с join'ами.
так я с вашими join разберусь еще. я тут каждую минуту узнаю новые данные о том как же в новой базе wordpress хранятся данные . Они же совсем недавно её изменили. раньше она была много проще и все коды и мануалы что есть в сети просто устаревшие. а многие плагины не рабочие оттого

Хотя может и раньше задачи были много простыми и решались не только через SQL.

Сейчас я решил во что бы то не стало расширить командный запас SQL. потому обязательно буду разбираться в синтаксисе и логикоприменении SQL команд.

Далее буду наверное отчитываться о результатах. Думаю заинтересовал кого-то. А кому-то будет полезно в будущем. Мне так точно нужна шпаргалка на будущее.
Alar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести последние 5 записей из категории Wordpress? Edwin2014 WordPress и другие CMS 0 26.01.2014 13:04
Не выводятся посты в wordpress veter48 WordPress и другие CMS 1 12.10.2012 00:53
как вывести категории и записи к ним АлександрСмирнов PHP 2 13.08.2012 17:26
Новые посты на сайте(Wordpress) writeln('abcd') WordPress и другие CMS 3 13.05.2012 21:49
MS SQL ADO Как вывести через запрос Select из двух баз данных по совпадающему id? SovereignSun SQL, базы данных 2 17.01.2012 17:59