Alex,

With reference to Dave's comments/suggestions:-

> > I've got a 700-question multiple choice quiz that I've got imported into
> > MySQL, with one small problem: the answers to the quiz are not a separate
> > column. I have three columns for each of the possible answers; the correct
> > answer is denoted by a "*" in the appropriate field. For example, if I have
> > columns A, B, and C for the three answers, they would contain data such as
> > "George Washington", "*Abraham Lincoln", and "Bill Clinton".
> >
> > I'd like to be able to select out all the fields with a * in them, and then
> > place them in a new, blank column called Answer. However, I'm really not
> > sure how to select these out, since I can't say "where <colname> like "*%".
> > Further complicating the matter is the fact that, in a few of the questions,
> > there are multiple answers, and thus multiple columns with the asterisk in
> > them.
> >
> > How would I go about selecting out these fields? Even if I can only get
> > those with one answer, I'd be immensley appreciative.
>
> _If_ you can re-import I'd _strongly_ suggest you change your schema.
>
> You'd have one table for questions:
>
> Question
> ------------
> question_id   int  PK
> question      text
>
> Answer
> ------------
> question_id   int  PK (part 1)
> display_order int  PK (part 2)
> answer        text
> is_correct    tinyint (or bool, or whatever)
>
>
> Then it would _really_ easy to find all the correct answers, no matter how
> many you had.
>
> Ok, that's not necessarily the answer you were looking for, but if you did
> the import once maybe you can do it again.  And if not at least its
> something to think about next time.

in agreeing with the observation that the data design does not seem 'right', I offer 
an alternative solution...

Let's start with the simple case: one question, four multi-choice alternatives 
("answers"), and one correct
response. In this case, the above schema would have four rows in the Answer table and 
thus only one is_correct
field containing 'useful' data  with three other is_correct fields that are 
superfluous. (in this restricted
case) If there is only ONE correct response for EACH question - is_correct(_answer) is 
related to question, not
to alternative response ("answers")! So it would be more storage-efficient to put the 
is_correct field (suitably
renamed) in the Question table.

Moving on...you did mention that "in a few of the questions, there are multiple 
answers". Adding to the above
structure would quickly become a little 'messy', and if you were to have multiple 
'is_correct' columns the
Question (or Answer) table would become de-normalised and even less 
storage-inefficient. However if it were
changed from a tinyint field to ENUM (or if you prefer - and many people find them 
easier, a SET) column -
depending upon how you want to phrase your query transactions, it might then work in a 
way that suits.

Any use?
=dn



---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to