Заявка с проверка на две места.

sentenello

Registered
Здравейте,
Опитвам се да изкарам постовете който са със статус публикувани и същевременно само тея който са от дадената категория. Проблема е там, че категорията се записва доста сложно в БД-то.
Под сложно имам предвид, че има 3 таблици.
Първата съдържа поста който е с ИД 70 примерно. След това втората казва, че пост с ИД 70 има 'терм' 3, след това това терм 3 става на категори 8, и чак след това в последната таблица казва, че тази категори 8 е НОВИНИ примерно.

Общо взето е доста объркано, но ще се опитам да ви покажа по лесния начин за какво става въпрос.

$cat_id ми извежда в случая 8, което пък е Световни.
Ето ми я заявката която НЕ работи.
Код:
$zaqvka = mysql_query("SELECT * FROM `wp_posts` where `post_status` = 'publish' && ID!=41 && wp_terms,term_id == '$cat_id' order by ID DESC LIMIT $from, $max_results");

не работи заради wp_terms,term_id == '$cat_id'
когато го махна ми изкарва всички новини, а аз искам само от тази категория.

П.С. Деа стана много объркано, но дано сте ме разбрали :roll:
 
Код:
$zaqvka = mysql_query("SELECT * FROM `wp_posts` where `post_status` = 'publish' AND `ID` != '41' AND `wp_terms` = '$cat_id' AND `term_id` = '$cat_id' order by `ID` DESC LIMIT $from, $max_results") or die(mysql_error());
 
`wp_terms` = '$cat_id' ????

таблицата = ИД-то ???

Май се обърка :) дава ми Unknown column 'wp_terms' in 'where clause'
 
я напиши таблиците какви са и полетата, и кое на кое трябва да е равно, заявката ще стане с лефт и райт жоин
 
че ти уж имаш три таблици а вземаш колоните само на едната
 
Сега ще ви обясня с точност :)

В wp_posts се записва поста и неговото ИД
Пример: поста е с ИД 70

В wp_term_relationships ИД-то на поста е равно на term_taxonomy_id
Пример: 70 = 9 ( 70 е ид-то на поста, а 9 е term_taxonomy_id)

В wp_term_taxonomy , разбираме каква категория е поста
Пример: записа в който term_taxonomy_id =9 тук показва, че term_id = 8,а поле taxonomy = category

И чак в wp_terms разбираме каква е категорията
Пример: Тук term_id-то какво вече знаем е 8, а записа на term_id=8 показва, че поле NAME = Световни.

Общо взето е голяма бъркотия.
 
че не може ли в едната таблица да са имената на категориите а в другата за всики пост да има категория
 
Това е Wordpress и категориите се записват по този начин.
Както казаха малко по-рано ще стане с лефт и join, но досега никога не съм работил с такива заявки.
Ако някой може да каже как ще стане нека не го крие :idea: :wink:
 
ако съм те разбрал правилно, аз много се обърках и пак не разбрах, кое поле на кое е равно, защото не може id 70 да е равно на 9, трябва да е 70=70, нещо не обясняваш както трябва

Код:
"SELECT p.`id` FROM`wp_posts` AS p
LEFT JOIN `wp_term_relationships` AS t_r ON  p.`id`=t_r.`term_taxonomy_id`
RIGHT JOIN `wp_term_taxonomy` AS t_t ON =t_r.category=t_t.taxonomy
"
 
embaka каза:
ако съм те разбрал правилно, аз много се обърках и пак не разбрах, кое поле на кое е равно, защото не може id 70 да е равно на 9, трябва да е 70=70, нещо не обясняваш както трябва

Код:
"SELECT p.`id` FROM`wp_posts` AS p
LEFT JOIN `wp_term_relationships` AS t_r ON  p.`id`=t_r.`term_taxonomy_id`
RIGHT JOIN `wp_term_taxonomy` AS t_t ON =t_r.category=t_t.taxonomy
"

Точно ИД-то на поста (70) е равно на 9, което пък е term_taxonomy_id

Би ли ми обяснил какво е това 'p', t_r в заявката която ми даваш, за да може да ги замястя с правилните имена ?
 
`wp_posts` AS p

ако е wp_posts.`id` става p.`id`, в случая p вече ти е името на wp_posts таблицата, приема името, може да си го кръстиш както искаш

ами както е в случая wp_post таблицата ти има полета, id, terms и т.н., значи, за да не ти се повтарят полетата, понеже може да имаш и в трите таблици поле id се прави това нещо

и като трябва да вземеш различни полета според таблицата, преди полето пишеш p.`id` вместо wp_posts.`id`, съкращаваш си писането, но това няма да ти е цялата заявка може би ще има WHERE клауза
 
Мисля че ти си човека който може да ми помогне, но явно не си разбрал какво точно искам да кажа с това
В wp_posts се записва поста и неговото ИД
Пример: поста е с ИД 70

В wp_term_relationships ИД-то на поста е равно на term_taxonomy_id
Пример: 70 = 9 ( 70 е ид-то на поста, а 9 е term_taxonomy_id)

В wp_term_taxonomy , разбираме каква категория е поста
Пример: записа в който term_taxonomy_id =9 тук показва, че term_id = 8,а поле taxonomy = category

И чак в wp_terms разбираме каква е категорията
Пример: Тук term_id-то какво вече знаем е 8, а записа на term_id=8 показва, че поле NAME = Световни.
 
Ето ти точно как са таблиците и полетата в БД-то

Код:
таблица wp_posts
ИД             ИМЕ
70              Новинка
Код:
таблица wp_term_relationships
Object_id      term_taxonomy_id
70                               9

Код:
 таблица wp_term_taxonomy
term_taxonomy_id        term_id      taxonomy
9                                               8                  category

Код:
Таблица wp_terms (тази вече показва коя е категорията)
term_id 	 name
8                         Световни

Всичко е навързано по реда по който ти го показвам.
 
на теб какво точно ти трябва, когато си в дадена категория да ти изкарва за тази категория всички добавени и активни новини

значи, заявката ще е нещо от сорта, дано нямаш много записи, че ще стане много тежка

Код:
"SELECT p.`id`,p.`name`,t.name as catname FROM `wp_posts` AS p
LEFT JOIN `wp_term_relationships` AS tr ON p.`id`=tr.`object_id`
LEFT JOIN `wp_term_taxonomy` AS tt ON tr.`term_taxonomy_id`=tt.`term_taxonomy_id`
LEFT JOIN `wp_terms` AS t ON tt.`term_id`=t.`term_id`
WHERE t.`term_id`=".$cat." ORDER BY p.`id` DESC"


ако всичко е точно, трябва да ти изведе всички новини с полета id,name,catname на постовете в разглеждана в момента от теб категория

$cat ще ти е текущата категория (цифрата)
 
@Embaka
Няма да го направя по този начин. Ще търся друг вариант да го направя.
Въпреки всичко наистина оценявам много положения от теб труд. Давам ти +1 което е малко за изхабените нерви и време с мен, но само това мога ;)

Мерси
 

Back
Горе