Since the query you have gives you the list of polls that you want, what
about dumping the results of that query into a temp table, and doing a
random select on the temp table with SELECT TOP 1 and ORDER BY NEWID() ?

Steve



On Wed, Aug 3, 2011 at 2:43 PM, Robert Harrison
<[email protected]>wrote:

>
> I have this SQL statement below.
>
>        <cfquery name="random_poll" datasource="#dsn#">
>        SELECT DISTINCT portal_polls.poll_id, portal_polls.question,
> portal_polls.answer1, portal_polls.answer2, portal_polls.answer2,
> portal_polls.answer4, portal_polls.answer4, portal_polls.number_answers
>        FROM   portal_polls, portal_groups_x_polls, portal_groups_x_students
>        WHERE  (portal_polls.start_date < #Now()# and portal_polls.end_date
> > #Now()#)
>                        and (everyone=1 OR
> (portal_groups_x_polls.poll_id=portal_polls.poll_id and
> portal_groups_x_students.group_id=portal_groups_x_polls.group_id and
> portal_groups_x_students.student_user_id=#session.userid#))
>                        and not exists (SELECT * FROM
> portal_students_x_polls_completed WHERE
> portal_students_x_polls_completed.poll_id=portal_polls.poll_id and
> portal_students_x_polls_completed.student_user_id=#session.userid#);
>        </cfquery>
>
>
> In short it selects a list of polls which:
>
>        1.  Are active (open but not ended) ... thus the start_date,
> end_date
>        2.  Are open to everyone (everyone) OR open to a group for which
> this poll is allowed and in which the user (session.userid) is enrolled...
> thus the joins to portal_groups_x_polls and portal_groups_x_students)
>        3. and Have NOT already been completed by this user... thus the not
> exists in portal_students_x_polls_completed
>
> All this is working correctly, but I want to select ONLY 1 poll at RANDOM.
>
> Normally I would use TOP 1 and ORDER BY NEWID() to do this.  But it doesn't
> like that with the DISTINCT clase. I'm using DISTINCT because the same poll
> could come up several times if it's allowed in multiple groups and that use
> is in several of those groups. And I would drop the DISTINCT but if one poll
> comes up a bunch of times that would increase the likelihood it would be
> selected at random.
>
> Anyone know how I can adjust this query to select only 1 matching record at
> random?
>
>
> Thanks,
> Robert
>
>
>
> Robert B. Harrison
> Director of Interactive Services
> Austin & Williams
> 125 Kennedy Drive, Suite 100
> Hauppauge NY 11788
> P : 631.231.6600 Ext. 119
> F : 631.434.7022
> http://www.austin-williams.com
>
> Great advertising can't be either/or.  It must be &.
>
> Plug in to our blog: A&W Unplugged
> http://www.austin-williams.com/unplugge
>
> 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Order the Adobe Coldfusion Anthology now!
http://www.amazon.com/Adobe-Coldfusion-Anthology/dp/1430272155/?tag=houseoffusion
Archive: 
http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:346496
Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm
Unsubscribe: http://www.houseoffusion.com/groups/cf-talk/unsubscribe.cfm

Reply via email to