Brug af AI afslører de svagheder, virksomheder allerede har opbygget gennem års cloud-transformation, nye SaaS-løsninger og fragmenterede sikkerhedssystemer.
milo > nu er det sådan jeg fik besked på at det ikke kunne lade sig gøre at lave det i MySQL så jeg oprettede det derfor i PHP i stedet for... det andet spm er også lukket
Det lyder lidt somom din database er skidt organiseret. Istedet for en masse forskellige 'debat_<emne>' tabeller kunne du lave een enkelt tabel med navnet debat, og så et ekstra felt i rækkerne i den tabel for emnet.
jakoba > jeg har overvejet at lave det i en table, men bliver søgetiden ikke rimelig lang når der kommer rigtig mange rækker?? når nu min debat forum er delt ud over flere filer skulle man jo tro at det gik hurtigere?? eller det er måske bare noget jeg tror?? :)
<div id="overview"> <? $sql = "SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time FROM $DB.$table debate LEFT JOIN $DB.$table debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0 WHERE debate.reply_id=0 GROUP BY debate.thread_id ORDER BY last_time DESC";
if($list_arr['rows']) { foreach($list_arr['rows'] as $value) { $sql = "SELECT debate.subject, debate.user_id, debate.time, user.name FROM $DB.$table debate LEFT JOIN $DB.user user ON debate.user_id=user.id WHERE debate.id=$value"; $get = mysql_query($sql); $row = mysql_fetch_array($get);
Her laver jeg et array over alle tråde i det pågældende tema (table), da jeg laver en liste over alle de siderne. Har f.eks. 25 tråde på hver side. Der bliver så smidt en limit på for at vise den aktuelle side
SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time FROM $DB.$table debate LEFT JOIN $DB.$table debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0 WHERE debate.reply_id=0 GROUP BY debate.thread_id ORDER BY last_time DESC
Her har jeg så en løkke der henter hver tråd ud
SELECT debate.subject, debate.user_id, debate.time, user.name FROM $DB.$table debate LEFT JOIN $DB.user user ON debate.user_id=user.id WHERE debate.id=$value
Og til sidst bliver alle indlæg til hver tråd smidt ind i den pågældende tråd
"SELECT debate.id, debate.subject, debate.user_id, debate.time, COUNT(debate2.reply_id) AS replies, user.name FROM ($DB.$table debate LEFT JOIN $DB.user user ON debate.user_id=user.id) LEFT JOIN $DB.$table debate2 ON debate.id=debate2.reply_id WHERE debate.reply_id=$reply_id GROUP BY debate.id ORDER BY debate.time DESC
Tabellens størrelse vil 'i gennemsnit' være logaritmisk proportional med tilgangstiden. dvs hvis tabellen bliver 1000 gange så stor bliver den noget i retning af log(1000) gange så langsom. jeg vil tippe at diverse php krumspring og gentagne queries ind de mange tabeller vil koste langt mere tid.
Men det er som sagt 'i gennemsnit'. Der kan være ekstreme worst-case situationer for begge opbygninger.
Almindeligvis er der langt mere tidsbesparelse i at lave gode indexer ind i sine tabeller. og at gennemtænke of teste de sql-queries man sender den.
mvh JakobA
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.