Jump to content
php.lv forumi

Puse darba padarīta, otru nevaru izdomāt :(


IM24LV

Recommended Posts

taatad ir skripts

 

$sql = dbquery("SELECT comment_item_id, comment_datestamp, news_id, news_subject FROM {$db_prefix}comments JOIN {$db_prefix}news ON {$db_prefix}comments.comment_item_id={$db_prefix}news.news_id ORDER BY comment_datestamp DESC LIMIT 10 ");

 

 

 

taatad ir divas tabulas - komentaariem un jaunumiem. no jaunumiem es atlasu nosaukumu kas ir news_subject un id kas ir news_id. no komentaariem es atlasu id- comment_item_id, laiku - comment_datestamp.

 

Tad es salīdzinu, lai abi būtu vienādi ID, un lai sakārto pēc jaunākā, un pēcāk jau iznesu. bet man ir nepieciešams, ja pie viena jaunuma ir vairāki jauni komentāri, tad lai šis skript rāda tikai vienreiz to jaunumu, nevis katram jaunam komentāram tajā jaunumā iznestu visu uz lapas. kā lai to izdara? help jau stundu visvisādi nomocījos, nevaru izdomāt :(

Edited by IM24LV
Link to comment
Share on other sites

SELECT c.comment_item_id, c.comment_datestamp, n.news_id, n.news_subject FROM {$db_prefix}comments c, {$db_prefix}news n WHERE c.comment_item_id=n.news_id GROUP BY c.comment_item_id ORDER BY c.comment_datestamp DESC LIMIT 10

Edited by marcis
Link to comment
Share on other sites

paldies, tiesam nezināju šādu funkciju :D :) itkā strādā, bet tomēr uzvedas dīaini, dažus neparāda, bet dažus parāda tādus, kuriem nav komentāru.

 

P.S. un kāda ir atšķirība ja mēs tā grupējam dažādo tabulu kolonnas? :) izmēģināju abejādi, abi vienādi izmeta ar kļūdām

Edited by IM24LV
Link to comment
Share on other sites

Errorus nemet ārā? mysql_error();

Itkā jau visam jābūt ok. Viņš skatās lai news tabulas id sakristu ar coments tabulas item_id (vai kā tur), ja nesakrīt - značit nerādam.

Var jau arī šitā

SELECT c.comment_item_id, c.comment_datestamp, n.news_id, n.news_subject FROM `{$db_prefix}comments` c JOIN `{$db_prefix}news` n ON (c.comment_item_id=n.news_id) GROUP BY c.comment_item_id ORDER BY c.comment_datestamp DESC LIMIT 10

Link to comment
Share on other sites

  • 2 weeks later...

Klau, bet kā panākt lai tas grupētājs viņus grupē no cvecākā uzjaunāko? jo patlaban ir šādi

 

ja ir secīgi komentāri secīgi šādos jaunumos:

 

jaunums1

jaunums1

jaunums1

jaunums2

jaunums4

jaunums2

jaunums3

jaunums1

jaunums5

 

tad patlaban tiek parādīs kā

 

 

jaunums4

jaunums2

jaunums3

jaunums1

jaunums5

 

tātad kā jaunākais netiek parādīsts pats jaunākais, tādēļ ka tiek grupēts tā ka jaunākais sagrupējas un kļūst par vecāko tās grupas komentāru. vajag lai būtu

 

jaunums1

jaunums2

jaunums4

jaunums3

jaunums5

Link to comment
Share on other sites

Nafig katru reizi JOIN ? Ievies jaunu kolonnu!

select from jaunumi order by last_comment_datestamp

 

1.) strādās ātrāk

2.) ērtāk selektēt

 

 

Un kā Tu to biji īsti domājis ar to "ieviess jaunu kolonnu"? Maby ar AS? :D :)

 

Nevaru saprast kā varētu ar diviem selectiem, jo ir taču jāpārbauda lai ID sakristu :hmmm:

SELECT c.comment_item_id, c.comment_datestamp, n.news_id, n.news_subject FROM `{$db_prefix}comments` c JOIN `{$db_prefix}news` n ON (c.comment_item_id=n.news_id) GROUP BY c.comment_item_id ORDER BY c.comment_datestamp DESC LIMIT 10

Link to comment
Share on other sites

nosauc visus abu tabulu laukus.

Uz ātru roku izmēģinātu šo (iespējams nepareizo):

SELECT c.comment_item_id, CASE WHEN is_null(max(c.comment_datestamp)) THEN n.timestamp ELSE max(c.comment_datestamp) AS tjipa_datums, n.news_id, n.news_subject FROM `{$db_prefix}news` AS n LEFT JOIN `{$db_prefix}comments` AS c ON (c.comment_item_id=n.news_id) ORDER BY tjipa_datums

Nezinu, kā vai darbosies, bet šķiet - tu gribēji, lai parāda to datumlaiku, kas atbilst pēdējam komentāram, ja ir komentārs, vai raksta ievietošanas laiku, ja nav neviena komentāra.

Link to comment
Share on other sites

Aleksej, nē, Tu īsti nesaprati kas vajadzīgs.

 

Tātad ir divas tabulas - komentāru un jaunumu.

 

commentu table vajadzīgie ir

 

comment_id comment_item_id comment_name comment_datestamp

 

comment item id norāda jaunuma ID, comment name norāda lietotāju, un comment datestamp noraada laiku.

 

News table vajadzīgie ir

 

news_id news_subject

 

new subjekt ir jaunuma virsrtaksts, nekas cits nav nepieciešams

 

kā jau rakstīju, šis kods:

 

SELECT c.comment_item_id, c.comment_datestamp, n.news_id, n.news_subject FROM {$db_prefix}comments c, {$db_prefix}news n WHERE c.comment_item_id=n.news_id GROUP BY c.comment_item_id ORDER BY c.comment_datestamp DESC LIMIT 10

 

 

strādā, bet sagrupēts tiek tā, ka ja piemēram esmu ierakstījis sākumā komentāru pirmajam rakstam, pēc tam otrajam un trešajam, un pēc tam atkal pirmajam, tad kā jaunākais netiek parādīts pirmā raksta komentārs, jo tiek grupēts uz pašu pirmo komentāru tipa komentāri ir šādā secībā:

 

komentars1.jaunumam

komentars2.jaunumam

komentars1.jaunumam

komentars3.jaunumam

komentars1.jaunumam

ar to kodu tas tiek attēlots šādi:

 

komentars1.jaunumam

komentars2.jaunumam

komentars3.jaunumam

 

bet vajag lai attēlo:

 

komentars2.jaunumam

komentars3.jaunuma

komentars1.jaunumam

 

tipa ka kaa jaunaakais ir pirmais jaunums. vajag kkā lai tas GROUP BY ir DESCENDING nevis ASCENDING kā tagad, bet nezinu kā tas panākams. ceru ka saprati :D

bet par to jauno kolonnu - es nesaskatu vajadzību :D vismaz pagaidām :hmmm:

Link to comment
Share on other sites

×
×
  • Create New...