Resultaten filteren op INDEX gebruiker_id

Status
Niet open voor verdere reacties.

donboe

Nieuwe gebruiker
Lid geworden
18 jul 2014
Berichten
4
Hallo ik ben nieuw op het forum en een newby als het gaat om webdesign en dus ook database gebruik. Ik loop tegen het volgende probleem aan. Ik heb een pagina berichten de resultaten voor deze pagina komen uit de tafel berichten:
Code:
CREATE TABLE IF NOT EXISTS `berichten` (
  `bericht_id` int(11) NOT NULL AUTO_INCREMENT,
  `gebruiker_id` smallint(4) NOT NULL DEFAULT '0',
  `bericht` text,
  `verzonden` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `isNieuw` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`bericht_id`),
  KEY `gebruiker_id` (`gebruiker_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
Deze pagina wordt elke 10 seconden, met gebruik van Ajax, ververst om te kijken of er nieuwe berichten zijn (`isNieuw` tinyint(1) NOT NULL DEFAULT '1'). Hiervoor gebruik ik de volgende query:
PHP:
    $isNieuw  =  1;
  
    $c   = "SELECT * FROM profiel_berichten WHERE isNieuw = :isNieuw";
    $check = $pdo->prepare($c);
    $check->bindParam(":isNieuw", $isNieuw);
    $check->execute();  
    $res = $check->fetchAll();
Mocht(en) er een nieuw bericht of nieuwe berichten zijn dan wil ik die eigenlijk Random naar een beschikbare admin doorsturen. Maar dan niet alleen het nieuwe bericht maar alle berichten van de desbetreffende gebruiker. Om het wat duidelijker te maken! Hier onder staan voorbeeld gegevens van de tafel berichten. Om het overzichtelijk te houden heb ik de bericht tekst en de verzend datum weggelaten.

Code:
INSERT INTO `berichten` (`bericht_id`, `gebruiker_id`, `isNieuw`) VALUES
(1, 13, 0),
(2, 13, 0),
(3, 12, 0),
(4, 12, 0),
(5, 13, 0),
(6, 13, 0),
(7, 12, 1),
(8, 13, 1);

Zoals je ziet zijn er 8 berichten, waarvan de 2 laatste (7 en 8) nieuw zijn. Bericht 7 komt van gebruiker met id 12 en bericht 8 van id 13. Wat ik nu probeer te verwezenlijken is dat het nieuwe bericht van gebruiker_id 12 plus de andere berichten van gebruiker_id 12 naar een willekeurige beschikbare admin worden doorgestuurd en het nieuwe bericht van gebruiker_id 13 plus de andere berichten van gebruiker_id 13 naar een andere admin.

Dus dacht ik na de check of er nieuwe berichten zijn de volgende query te kunnen gebruiken

Code:
    if ($res) {

      $b = "SELECT DISTINCT(gebruiker_id), bericht, verzonden
              FROM berichten";
	  
	  $berichten = $pdo->prepare($b);      
      $berichten->execute();    
      
      while($row = $berichten->fetch()) {
           echo "<p>{$row[gebruiker_id']} - {$row['bericht']}</p>";
       }
    } else {

    echo "Er zijn momenteel geen nieuwe berichten";

    }

Ik dacht ik gebruik te kunnen maken van de DISTINCT() functie om op die manier alleen de berichten van 1 gebruiker_id te tonen maar dat werkt dus niet. Op deze manier worden gewoon alle 8 berichten getoond. Ook heb ik geprobeerd een ORDER BY clause te gebruiken ORDER BY gebruiker_id LIMIT 1. Maar dan worden de berichten gelimiteerd tot 1 maar niet de gebruiker_id. Wat moet ik doen of aanpassen om het bovengenoemde resultaat te verwezenlijken.

Al vast bij voorbaat dank.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan