IM24LV Posted January 4, 2008 Report Share Posted January 4, 2008 (edited) 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 January 4, 2008 by IM24LV Link to comment Share on other sites More sharing options...
marcis Posted January 4, 2008 Report Share Posted January 4, 2008 (edited) 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 January 4, 2008 by marcis Link to comment Share on other sites More sharing options...
IM24LV Posted January 4, 2008 Author Report Share Posted January 4, 2008 (edited) 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 January 4, 2008 by IM24LV Link to comment Share on other sites More sharing options...
marcis Posted January 5, 2008 Report Share Posted January 5, 2008 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 More sharing options...
IM24LV Posted January 15, 2008 Author Report Share Posted January 15, 2008 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 More sharing options...
IM24LV Posted January 17, 2008 Author Report Share Posted January 17, 2008 ...tikai atjaunoju tēmu. Vēljoprojām neesmu radis risinājumu. :( Link to comment Share on other sites More sharing options...
Delfins Posted January 17, 2008 Report Share Posted January 17, 2008 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 Link to comment Share on other sites More sharing options...
IM24LV Posted January 17, 2008 Author Report Share Posted January 17, 2008 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 More sharing options...
Aleksejs Posted January 17, 2008 Report Share Posted January 17, 2008 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 More sharing options...
xPtv45z Posted January 18, 2008 Report Share Posted January 18, 2008 (edited) CASE WHEN is_null(max(c.comment_datestamp)) THEN n.timestamp ELSE max(c.comment_datestamp) Šo var pierakstīt daudz vienkāršāk. IFNULL(MAX(c.comment_datestamp), n.timestamp) http://dev.mysql.com/doc/refman/5.0/en/con...function_ifnull Edited January 18, 2008 by xPtv45z Link to comment Share on other sites More sharing options...
Delfins Posted January 18, 2008 Report Share Posted January 18, 2008 Kāpēc jauniņie nekad neieklausās un turpina peldēt pa mēsliem? Ievies jaunas kolonnas tabulā - komentu_skaits, pedeja_komenta_laiks Paskaties jebkuru +/- normālu webu (open-source), būs tieši tāpatās. Link to comment Share on other sites More sharing options...
IM24LV Posted January 18, 2008 Author Report Share Posted January 18, 2008 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 More sharing options...
Delfins Posted January 18, 2008 Report Share Posted January 18, 2008 Tā ir, ka nelasa SQL pamatus... Ja tev vajag kolonnu un izmanto groupēšanu, tad kolonnai jābūt iekš group by vai nu agregācijā ieliktai. Citādi Mysql gadījumā tiks izvadīts random rezultāts Link to comment Share on other sites More sharing options...
Recommended Posts