[php] Poll weergeven

Pagina: 1
Acties:

Onderwerpen


  • WebRaider
  • Registratie: Maart 2003
  • Laatst online: 27-02 15:30

WebRaider

There's Always a way

Topicstarter
Ik ben bezig een poll te maken, waar er oneindig aantal opties kunnen zijn. Mijn probleem is de uitvoer van dit. Het script moet kijken naar het aantal anwtoorden voor die bepaalde poll, en dan daarop gebasseerd de stemmen tellen per antwoord.

Mijn databases zijn uitgebouwd via dit principe:
poll_questions --> id, question
poll_awnsers --> id, question_id, awnser
poll_response --> id, question_id, awnser_id, user_id

Dus moet het script kijken in de tabel 'poll_awnsers' hoeveel antwoorden er zijn op de gevraagde question. En daarop gebasseerd tellen in 'poll_response' hoeveel responses er zijn voor dat bepaalde antwoord. En al deze getallen had ik graag in een array gezet via het principe $var = array("awnser_$i" => $aantal_responses )
waar $i een soort telling is 1 --> aantal antwoorden.

Ik heb al enkele mislukte pogingen achter de rug ... hopelijk hebben jullie een oplossing.

WebRaider


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Je database-model is in ieder geval prima. Ok, hoe zien mijn queries, op een soortgelijke DB-layout uit (pseudo code):

1. Query poll_questions ID en question;
2. Loopje:
- Query id en awnser van poll_awnser met betreffende question_id;
- Query totaal aantal votes uit poll_response met de huidige poll_awnsers.id van deze loop.
3. Tel nog wat totalen e.d.

offtopic:
het is answer

[ Voor 6% gewijzigd door Grijze Vos op 12-02-2004 11:28 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • WebRaider
  • Registratie: Maart 2003
  • Laatst online: 27-02 15:30

WebRaider

There's Always a way

Topicstarter
Neen, ik kom er nog niet (sry)

dit heb'k:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
include("connect.php");
    $query = "SELECT * FROM $db_poll_questions WHERE id = '$pid' ORDER BY id";
    $result = mysql_query($query);
    $poll_question = mysql_fetch_array($result);
        
        $query = "SELECT * FROM $db_poll_awnsers WHERE question_id = '$pid' ";
        $result = mysql_query($query) or die( mysql_error() );
        while($i = mysql_fetch_array($result) )
        {
            $query= "SELECT * FROM $db_poll_respons WHERE awnser_id = '$i[id]'";
            $result = mysql_query($query) or die( mysql_error() );
            $num_respons = mysql_num_rows($result);
            $poll_respons = array( "$i" => $num_respons );
            echo "$poll_response[$i]";
            
        }

WebRaider


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik verbeter even wat foutjes:

$query = "SELECT * FROM $db_poll_questions WHERE id = '$pid' ORDER BY id";

$query = "SELECT * FROM $db_poll_awnsers WHERE question_id = $pid";

$query= "SELECT * FROM $db_poll_respons WHERE awnser_id = " . $i[id]

echo "$poll_response[$i]";

ID's zijn numeriek, geen quotes gebruiken dus. Verder is je debug echo fout. En je zette $i[id] in tussen double quotes, dat gaat niet werken.

[ Voor 27% gewijzigd door Grijze Vos op 12-02-2004 12:27 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • WebRaider
  • Registratie: Maart 2003
  • Laatst online: 27-02 15:30

WebRaider

There's Always a way

Topicstarter
Hij doet het nog steeds niet ...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
include("connect.php");
$query = "SELECT * FROM $db_poll_questions WHERE id = '$pid'";
$result = mysql_query($query);
$poll_question = mysql_fetch_array($result);
        
    $query = "SELECT * FROM $db_poll_awnsers WHERE question_id = $pid ";
    $result = mysql_query($query) or die( mysql_error() );
    while($i = mysql_fetch_array($result) )
    {
        $query= "SELECT * FROM $db_poll_respons WHERE awnser_id =" . $i[id];
        $result = mysql_query($query) or die( mysql_error() );
        $num_respons = mysql_num_rows($result);
        $poll_respons = array( $i[id] => $num_respons );
    }
        
    $page_message = $poll_respons[7];  #Testen


Heeft iemand een idee, want ik begin vrij hopeloos te komen...
edit:
Ik denk er aan om mijn systeem opnieuw te maken ... dat ie gewoon de resultaten uit de db haalt, er een bijtelt en dan terug stored...

[ Voor 14% gewijzigd door WebRaider op 12-02-2004 12:55 ]

WebRaider


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

offtopic:
awnser --> answer
;)

Intentionally left blank


  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Er staat nog steeds een keer '$pid' in een query.
Een beetje zelf dingen onderzoeken kan prima hoor ;)

[ Voor 43% gewijzigd door MatHack op 12-02-2004 12:59 ]

There's no place like 127.0.0.1


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Let goed op de scope van variabelen, een nieuwe scope is geen nieuwe variable!

Het antwoord van je poll_answers query sla je op in $result. Vervolgens ken je $result een andere waarde toe in de while loop. Als de while lus is afgelopen geef je $result weer aan mysql_fetch_array die de resultaten van poll_respons zal laten zien.
Goed behoorlijk onduidelijk verhaal van mijn kant. Maar ook genoeg onduidelijke code van jouw kant :-)

Als 'redelijke' optimalisatie van je code zou je natuurlijk ook al (misschien het beste om met de laatste 2 te beginnen) je sql query kunnen herschrijven naar 1 query (Als ik de intentie goed door heb tenminste).
Kijk bijv eens naar COUNT in diverse sql tutorials.

[ Voor 3% gewijzigd door Sjaaky op 12-02-2004 13:13 ]


  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 24-06 09:47

4VAlien

Intarweb!

code:
1
 'answer'
gebruik anders Nederlandse namen voor je variabelen. En is het niet beter om alle antwoorden op een vraag gewoon als int te nemen in de rij waarin die antwoord mogelijkheid staat?

dus iets als:
PollQuestion : ID, question
PollOption: ID , text , response (int)
PollCheck: ID, user

edit: oh met user :/

[ Voor 10% gewijzigd door 4VAlien op 12-02-2004 13:06 ]


Acties:
  • 0 Henk 'm!

  • WebRaider
  • Registratie: Maart 2003
  • Laatst online: 27-02 15:30

WebRaider

There's Always a way

Topicstarter
Wel, nu heb'k dat dus idd aangepast, bespaart heel wat rekenwerk.
Database-structuur ziet er nu zo uit:
poll_questions --> id, question
poll_answer --> id,question_id, answer
poll_respons --> id,question_id, answer_id, votes
waar votes het aantal stemmen is.

Toch blijf ik bij het probleem dat er een willekeurig aantal antwoorden kunnen zijn. en dat die allemaal moeten verwerkt worden.
Dit is mijn huidige code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
include("connect.php");
    $query = "SELECT * FROM $db_poll_questions WHERE id = '$pid'";
    $result = mysql_query($query);
    $poll_question = mysql_fetch_array($result);
    
    $query = "SELECT * FROM $db_poll_awnsers WHERE question_id = $pid "; 
    $result = mysql_query($query) or die( "Hoofdquery: ". mysql_error() ); 
    while($i = mysql_fetch_array($result) ) 
    { 
        include("connect.php");
        $query= "SELECT votes FROM $db_poll_respons WHERE awnser_id =" . $i[id]; 
        $result = mysql_query($query) or die("Loop-error ($i[id]): ". mysql_error() );
        $result_1 = mysql_fetch_array($result);
        $poll_respons = array( $i[id] => $result_1[votes] );
    }
    
    
    $page_message = $poll_respons[7];  #Tester


Ik heb gekeken in m'n database, en de anser_id's zijn 4 en 7
4 heeft in poll_answer het id 21 , en 7 heeft id 20
Ik kan het aantal stemmen van answer 4 te voorschijn laten komen, maar niet van 7.

WebRaider


Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 06:09
Waarom gebruik je niet de COUNT() functie van MySQL? Bijv:
code:
1
2
3
4
SELECT answer_id, COUNT(*) , answer
FROM  $db_poll_respons AS r, $db_poll_answers AS a
WHERE answer_id=a.id
GROUP  BY answer_id

Als je ook de answers met 0 votes moet hebben, zou je eens naar JOIN's kunnen kijken.

wat houdt het votes-veld in de respons tabel eigenlijk in?
edit:
had ik dus overheen gelezen

Je kan het votes veld ook in de answers-tabel zetten, als het toch het aantal votes is, scheelt je weer 1 tabel, en je hebt maar 1 aantal votes per answer (als het goed is >:) :P )

[ Voor 56% gewijzigd door Eärendil op 13-02-2004 13:26 . Reden: ik blaatte onzin ]


Acties:
  • 0 Henk 'm!

  • Sosabowski
  • Registratie: Juni 2003
  • Laatst online: 18-09 21:03

Sosabowski

nerd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
    include("connect.php"); 
    $query = "SELECT * FROM $db_poll_questions WHERE id = '$pid'"; 
    $result = mysql_query($query); 
    $poll_question = mysql_fetch_array($result); 
     
    $query = "SELECT * FROM $db_poll_awnsers WHERE question_id = '$pid'"; 
    $result = mysql_query($query) or die( "Hoofdquery: ". mysql_error() ); 
    while ( $i = mysql_fetch_array($result) )  { 
        include("connect.php"); 
        $query= "SELECT votes FROM $db_poll_respons WHERE awnser_id = " . $i['id']; 
        $result = mysql_query($query) or die("Loop-error (" . $i['id'] . "): " . mysql_error() ); 
        $result_1 = mysql_fetch_array($result); 
        $poll_respons = array( $i[id] => $result_1[votes] ); 
    } 
     
    $page_message = $poll_respons[7];  #Tester
?> 


Ik heb niks getest hoor maar probeer wat concquenter te zijn met je 's en je "s.
Daarnaast valt dit eigelijk onder debuggen, iets wat je zelf moet leren.

[ Voor 10% gewijzigd door Sosabowski op 13-02-2004 13:21 ]

The whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubts. -- Bertrand Russell

Pagina: 1