Avatar billede sjh Nybegynder
24. februar 2007 - 02:00 Der er 11 kommentarer og
1 løsning

Optimering af sql-sætning til forum.

Jeg har den her kode.. som skal updater nogle brugernavne i (forumm = forum message) til sidst..

Ja det er lidt svært at forklar.. men iden er at den kun skal køre ..INSERT INTO forumm.. hvis de IKKE er i forumm.

ved ikke om det kan optimeres bedre..

<?php
  /* forumq = forum question */
  $sqlResult = mysql_query("SELECT id, username FROM forumq WHERE id=$_GET[qid];", $sqlConn);
  if ($sqlResult) {
    while (list($id, $username) = mysql_fetch_row($sqlResult)) {
      /* Indsætter brugernavn så det kun er der én gang. */
      $arrUsername[$username] = $id;
    }
  }

  /* forumc = forum comment */
  $sqlResult = mysql_query("SELECT qid, username FROM forumc WHERE qid=$_GET[qid];", $sqlConn);
  if ($sqlResult) {
    while (list($qid, $username) = mysql_fetch_row($sqlResult)) {
      /* Indsætter brugernavn så det kun er der én gang. */
      $arrUsername[$username] = $qid;
    }
  }

  /* forumm = forum message */
  $sqlResult = mysql_query("SELECT qid FROM forumm WHERE qid=$_GET[qid];", $sqlConn);
  if ($sqlResult) {
    while (list($qid) = mysql_fetch_row($sqlResult)) {
      /* Fjerner de brugernavne som er i forumm (forum message). */
      unset($arrUsername[$username]);
    }
  }

  /* Hvis der ellers er nogle tilbage (så må det være en ny bruger) bliver de tilføjet her. */
  if (is_array($arrUsername)) {
    foreach($arrUsername as $username => $qid) {
      mysql_query("INSERT INTO forumm (qid, dato, username) VALUES ($qid, ".time().", '$username');", $sqlConn);
    }
    unset($arrUsername);
  }
?>
Avatar billede sjh Nybegynder
24. februar 2007 - 02:23 #1
ja skal selfølig være $username og ikke >(..list($qid) = mysql_fetch_row(..<

  /* forumm = forum message */
  $sqlResult = mysql_query("SELECT username FROM forumm WHERE qid=$_GET[qid];", $sqlConn);
  if ($sqlResult) {
    while (list($username) = mysql_fetch_row($sqlResult)) {
      unset($arrUsername[$username]);
    }
  }
Avatar billede arne_v Ekspert
24. februar 2007 - 02:58 #2
skud i tågen:

INSERT INTO forumm (qid, dato, username)
(SELECT id,NOW(),username FROM forumq WHERE id NOT IN SELECT qid FROM forumm)
UNION
(SELECT qid,NOW(),username FROM forumc WHERE qid NOT IN SELECT qid FROM forumm)
Avatar billede sjh Nybegynder
24. februar 2007 - 03:09 #3
hvor skal jeg så sette $_GET[qid]
Avatar billede arne_v Ekspert
24. februar 2007 - 04:07 #4
INSERT INTO forumm (qid, dato, username)
(SELECT id,NOW(),username FROM forumq WHERE id=X AND id NOT IN SELECT qid FROM forumm)
UNION
(SELECT qid,NOW(),username FROM forumc WHERE qid=X AND qid NOT IN SELECT qid FROM forumm)

måske
Avatar billede sjh Nybegynder
24. februar 2007 - 06:34 #5
Når ellers er kommer 2 () om IN (..) så virker den næsten.. problemet er nu at der kun kan komme ét brugernavn ind :(

INSERT INTO forumm (qid, dato, username)
(SELECT id,NOW(),username FROM forumq WHERE id=x AND id NOT IN (SELECT qid FROM forumm))
UNION
(SELECT qid,NOW(),username FROM forumc WHERE qid=x AND qid NOT IN (SELECT qid FROM forumm))
Avatar billede sjh Nybegynder
24. februar 2007 - 06:44 #6
Jo, det virker første gang hvis der ikke er nogle i forumm hvis der kommer et nyt brugernavn til under forumc så viser den ikke noget..
Avatar billede sjh Nybegynder
24. februar 2007 - 07:16 #7
hmmm tror sq den virker nu.. ser det her helt forkert ud?

INSERT INTO forumm (qid, dato, username)
(SELECT id,UNIX_TIMESTAMP() AS dato, q.username FROM forumq q WHERE id=$_GET[qid]
AND q.username NOT IN (SELECT m.username FROM forumm m WHERE m.qid=$_GET[qid]))
UNION
(SELECT qid,UNIX_TIMESTAMP() AS dato, c.username FROM forumc c WHERE qid=$_GET[qid]
AND c.username NOT IN (SELECT m.username FROM forumm m WHERE m.qid=$_GET[qid]));
Avatar billede arne_v Ekspert
24. februar 2007 - 15:59 #8
jeg har noget svaert ved at gennemskue de queries fordi jeg ikke ved hvad
tabeller og felter indeholder, men det ser ikke helt skaevt ud
Avatar billede sjh Nybegynder
24. februar 2007 - 16:36 #9
Ja, der klart.. sorry.. de to første er her : http://www.eksperten.dk/spm/763480 (forumq forumc) og forumm her:

CREATE TABLE `forumm` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `qid` int(11) NOT NULL default '0',
  `dato` int(11) default NULL,
  `username` varchar(15) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Forum ny besked';
Avatar billede sjh Nybegynder
25. februar 2007 - 00:34 #10
Arne V kan du ikke smide et svar..
Avatar billede arne_v Ekspert
25. februar 2007 - 02:10 #11
OK

virker det ?
Avatar billede sjh Nybegynder
25. februar 2007 - 02:51 #12
Ja.. dog kommer det brugernavn med som poster.. det brugte jeg jo >unset($arrUsername[$username]);< til at fjerne.. men det går nok..

mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester