login  Naam:   Wachtwoord: 
Registreer je!
 Forum

geen dubbele vragen

Offline Stefan14 - 12/08/2007 19:07 (laatste wijziging 12/08/2007 19:09)
Avatar van Stefan14PHP gevorderde Ik heb een quiz, en per dag mogen bezoekers hier 20 vragen invullen, maar ik zou graag willen dat ze geen dubbele vragen te zien krijgen.

Ik heb 3 tabellen, een met quizvragen, een met quiz antwoorden en een met de gegeven antwoorden.

ik heb de volgende query gemaakt:
  1. $query = "SELECT
  2. quizvragen.*
  3. FROM
  4. quizvragen,
  5. quiz_gegevenantwoorden
  6. WHERE
  7. quiz_gegevenantwoorden.vraagID != quizvragen.id
  8. ORDER BY
  9. RAND() LIMIT 1";


maar deze lijkt niet te werken.

tabelstructuren
  1. CREATE TABLE `quizvragen` (
  2. `id` int(11) NOT NULL auto_increment,
  3. `vraag` varchar(255) NOT NULL default '',
  4. `goedeantwoord` int(11) NOT NULL default '0',
  5. `actief` enum('1','0') NOT NULL default '1',
  6. `ingevoerd` datetime NOT NULL default '0000-00-00 00:00:00',
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ;
  9.  
  10. CREATE TABLE `quiz_gegevenantwoorden` (
  11. `id` int(11) NOT NULL auto_increment,
  12. `username` varchar(100) NOT NULL default '',
  13. `vraagID` int(11) NOT NULL default '0',
  14. `antwoordID` int(11) NOT NULL default '0',
  15. `tijd` datetime NOT NULL default '0000-00-00 00:00:00',
  16. PRIMARY KEY (`id`)
  17. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=53 ;

3 antwoorden

Gesponsorde links
Offline Stijn - 12/08/2007 19:12
Avatar van Stijn PHP expert
  1. GROUP BY quizvragen.vraag
zet die code achter je WHERE.
Offline Ultimatum - 12/08/2007 19:16
Avatar van Ultimatum PHP expert Je query klopt ook niet, je gaat alleen kijken of er 1 van de id's die voorkomen in de tabellen gelijk zijn. Je moet je where uitbreiden waarbij je kijkt of de ingevulde vraag al voorkomt in de tabe quizvragen. En waarom in godsnaam nog een RAND in je query ?

  1. $query = "SELECT
  2. quizvragen.*
  3. FROM
  4. quizvragen,
  5. quiz_gegevenantwoorden
  6. WHERE
  7. vraag = '". $ingevuldevraag ."'
  8. ORDER BY
  9. RAND() LIMIT 1";


De var $ingevuldevraag bevat de string met de vraag. En dan moet je met mysl_num_rows kijken of de vraag al bestaat, 1 is ja, 0 rows = niet. Maar dit gaat niet helemaal werken.

Als nou deze vraag erin staat:
Citaat:
Dit is een vraag.

En ik maak een nieuwe vraag:
Citaat:
Dit is een vraag!

Dan krijg je geen foutmelding maar je hebt wel exact dezelfde vraag.
Offline Stefan14 - 12/08/2007 19:19 (laatste wijziging 12/08/2007 19:21)
Avatar van Stefan14 PHP gevorderde @Stijn1989: waarom group by quivragen.vraag? in dit veld staat de vraag als string, moet dit niet met een veld waar een id in staat?

@Ultimatum: ik voer de vragen zelf in, dus wat dat betreft zal ik zelf wel opletten of er dubbele vragen in de tabel zelf zitten, er komen immers maar een stuk of 100 vragen in te zitten.
Het gaat mij juist om het random select gedeelte dat deze niet twee keer hetzelfde record ophaalt bij 1 persoon.

mmh, bij 1 persoon, dan moet er dus ook nog een selectie bij op username ergens  

En daarnaast zet ik er een rand() bij omdat hij anders alleen het laatste record laat zien uiteraard.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.21s