Jump to content

Tēmas vārda izvilkšana no komentāriem ar LEFT OUTER JOIN


AfterDark
 Share

Recommended Posts

Sveicināti.

 

Saskāros ar mazu problēmu mēģinot izvilkt komentāra vārdu ar mazāko ID.

 

Pēc mazākā komentāra ID es nosaku tēmas pirmo komentāru, kas skaitās kā tēmas autors - no tēmas autora komentāra es izvelku tēmas autora vārdu.

 

Tuvāk pie lietas...

Ja izveidojot svaigu tēmu, tad tēmas autors rādās vietā, jo ir tikai viens komentārs tēmā - tik tālu tēmas autors izvadās pareizi. Bet, ja turpina pievienot nākamos komentārus, tad tēmas autora vārds tiek izvadīts no tēmas pēdējā komentāra(koments ar lielāko ID) nevis no pirmā komentāra(sanāk ar mazāko ID).

Lūk, netieku gudrs, kā man izvadīt tēmas autora vārdu no komentāra ar mazāko ID vērtību?

 

// izvadam tēmas
if($result = $mysqli->query("
SELECT `news`.`id`, `news`.`title`, `news`.`datetime`, `news`.`comments`, `news`.`posting`, `news`.`moderation`, `news`.`hidden`, `comments`.`name`
FROM `news`
LEFT OUTER JOIN `comments`
ON `news`.`id` = `comments`.`parentid`
WHERE `news`.`category` = '3'
AND `news`.`hidden` ".$sortTopicsOperator." '0'
GROUP BY `news`.`id`
ORDER BY `comments`.`datetime` DESC
")) {

Link to comment
Share on other sites

comments.name vietā nogrupē pēc mastera un pievelc min(comment.id).

Pēc tam pēc šī id vienmēr pievilksi, ko vajag.

 

+ ja datubāze ir paša rakstīta, iesaku denormalizēt un pie pirmā komentāra saglabāšanas masterā ieseivot autoru.

Link to comment
Share on other sites

AfterDark

Iepriekš minētais kvērijs izpilda visu tieši kā vajag, vienīgi, kā jau minēju, ķibele ar to autoru.

Varbūt vari dzīvu piemēru piespēlēt ar to nogrupēšnu un min()? Es jūtu, ka šoreiz gaisma tuneļa galā ir pārāk tālu no manis.

Link to comment
Share on other sites

select
 `news`.`id`,
 `news`.`title`,
 `news`.`datetime`,
 `news`.`comments`, 
 `news`.`posting`,
 `news`.`moderation`,
 `news`.`hidden`,
 comments.name
from
 `news`
 left join (select comments.parentId parentId, min(comments.id) minId from comments group by comments.parentId) comIds on (news.id=comIds.parentId)
 left join comments on (comments.id = comIds.minId)
WHERE
 `news`.`category` = '3'
 AND `news`.`hidden` $sortTopicsOperator '0'
order by
 comments.`datetime` desc

Labots - Vilx-
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...