Solved

For Anand:  Help with list and query

Posted on 2003-11-15
6
247 Views
Last Modified: 2013-12-24
Thanks to Anand from my last question, I am hoping he or someone else can help me with this to finish it off.

This refers back to this question:
http://experts-exchange.com/Web/WebDevSoftware/ColdFusion/Q_20797355.html

So now I just want to know when i click on the category(http://www.jhasim.net/example_categories.jpg)
how can i sort through the single records and lists to only show the correct ID number, for instance in the the SQL image, ID 17.(http://www.jhasim.net/example_showcategories.jpg)

So basically, all i need to know now is how can i show all the programs that belong in a particular category when its ID is in a list.


Here is the code below that works fine when i was just showing 1 ID in the category field and not having a list:


<cfquery name="getPrograms" datasource="#DataTables#">
SELECT [Zone].ZoneID, [Zone].ZoneName, CMEPrograms.CMEProgramID, CMEPrograms.CMEProgramName, CMEPrograms.CMEProgramTagline, CMEPrograms.CMEProgramDate, CMEPrograms.CMEProgramCategory, CMEPrograms.CMEProgramVolume, CMEPrograms.CMEProgramNumber, year(CMEPrograms.CMEProgramDate) AS DateYear, month(CMEPrograms.CMEProgramDate) AS DateMonth
FROM CMEPrograms INNER JOIN [Zone] ON CMEPrograms.CMEProgramCategory = [Zone].ZoneID
WHERE CMEPrograms.CMEProgramCategory = #URL.ID#
Order By DateYear DESC, DateMonth DESC
</cfquery>

<TABLE width="100%" border="0" cellpadding="0" cellspacing="0">
      <TR>
        <TD class="TDtitle">&nbsp;ShowPrograms</TD>
      </TR>
      <TR>
        <TD>
<TABLE width="100%" border="0">
  <TR align="center">
    <TD colspan="4" class="TDdashed">Text Goes Here</TD>
  </TR>

  <TR>
    <TD colspan="4">&nbsp;</TD>
  </TR>
  <TR>
    <TD colspan="4" class="issueCategoryText"><CFOUTPUT>#getPrograms.ZoneName#</CFOUTPUT></TD>
  </TR>
  <TR>
    <TD colspan="4">
     <table width="100%">
     <cfoutput query="getPrograms" group="DateYear">
      <tr>
       <td class="TDTitle" colspan="2">&nbsp;#DateYear# Programs</td>
      </tr>
      <cfoutput>
      <tr>
      <td class="issueHeaderText" colspan="2"><a href="template.cfm?TEMPLATE=include_program.cfm&ID=#CMEProgramID#&PageName=#CMEProgramName#">#CMEProgramName#</a></td>
      </tr>
      <tr>
      <td class="secondary" colspan="2"><STRONG>#CMEProgramTagline#</STRONG></td>
      </tr>
      <tr>
      <td class="normaltextreg"><STRONG>Program Date:</STRONG> #Dateformat(CMEProgramDate, 'MMMM YYYY')#<cfif CMEProgramVolume GT 0 AND CMEProgramNumber GT 0> - <STRONG>Program Info:</STRONG> Volume #CMEProgramVolume#, (#CMEProgramNumber#)</cfif></td>
      <td class="normaltextreg"></td>
      </tr>
      <tr><td colspan="2">&nbsp;</td></tr>
      </cfoutput>
      </cfoutput>
     </table>
     </TD>
  </TR>
</TABLE>
0
Comment
Question by:jeffmace
  • 3
  • 2
6 Comments
 
LVL 9

Expert Comment

by:shooksm
ID: 9756453
Can you change the design of the database?  Having a single column defining your category relationships is not normalized.  You should have a seperate table that acts as a bridge table or many to many type of relationship.  It should containt the primary key for your Zone table and the primary key for your CMEProgramCategory table.  This would allow you do simply join the two tables based on that bridge table.

Option 2.  A real simple way to implement lists in a SQL column is to make sure you prefix and suffix the field with the delimeter.  IE, instead of

9,1,3

you would have

,9,1,3,

At that point, you can use the following in your where statement:

WHERE CMEPrograms.CMEProgramCategory LIKE('%#URL.ID#%')

Although this will work, because of the wildcards being on both sides of the string, if an index exists, it will be ignored.

Again, your best bet is to get the database design fixed.  Less problems down the rode the next time you have to add functionality.
0
 
LVL 9

Expert Comment

by:shooksm
ID: 9756457
Oops, here is a correction to the where statement as I forgot the delimeters:

WHERE CMEPrograms.CMEProgramCategory LIKE('%,#URL.ID#,%')
0
 
LVL 17

Expert Comment

by:anandkp
ID: 9757819
hmmm using :
WHERE CMEPrograms.CMEProgramCategory LIKE('%,#URL.ID#,%')

wld avoid the entries with just "17" as the value

this shld do the job - use CFQueryparam for added advantages !

<cfquery name="getPrograms" datasource="#DataTables#">
SELECT [Zone].ZoneID, [Zone].ZoneName, CMEPrograms.CMEProgramID, CMEPrograms.CMEProgramName, CMEPrograms.CMEProgramTagline, CMEPrograms.CMEProgramDate, CMEPrograms.CMEProgramCategory, CMEPrograms.CMEProgramVolume, CMEPrograms.CMEProgramNumber, year(CMEPrograms.CMEProgramDate) AS DateYear, month(CMEPrograms.CMEProgramDate) AS DateMonth
FROM CMEPrograms INNER JOIN [Zone] ON CMEPrograms.CMEProgramCategory = [Zone].ZoneID
WHERE CMEPrograms.CMEProgramCategory LIKE <cfqueryparam CFSQLTYPE="CF_SQL_VARCHAR" VALUE="%#URL.ID#%">
Order By DateYear DESC, DateMonth DESC
</cfquery>

HTH

let me know

K'Rgds
Anand
0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 9

Expert Comment

by:shooksm
ID: 9761268
Negative, not if you put the delimeters around single values too.  The problem with yours is that 17 is also in 117, 1700 or any other possible number with 17 in it.  That is why a delimeter is needed at the begining and ending of each value.  But as I said earlier, this is just a bandaid on a bigger problem of a bad database design.
0
 

Author Comment

by:jeffmace
ID: 9761370
I addressed the bad database design.  As stated in my previous question I altered it to no point to another table to look for the categories.  But what I was still looking to do was see if it is possilbe to do a query based on lists in a cell.  Thats all.
0
 
LVL 17

Accepted Solution

by:
anandkp earned 500 total points
ID: 9761517
depending on what is the maximum no of categories u have - lets say 9999

u can modify teh "where" condition as :

WHERE CMEPrograms.CMEProgramCategory LIKE (<CFQUERYPARAM CFSQLTYPE="CF_SQL_VARCHAR" VALUE="%#URL.ID#%">)
(
<CFLOOP INDEX="i" FROM="0" TO="99">
      And Not like (<CFQUERYPARAM CFSQLTYPE="CF_SQL_VARCHAR" VALUE="%#i##URL.ID#%">)
      And Not like (<CFQUERYPARAM CFSQLTYPE="CF_SQL_VARCHAR" VALUE="%#URL.ID##i#%">)
</CFLOOP>
And Not like (<CFQUERYPARAM CFSQLTYPE="CF_SQL_VARCHAR" VALUE="%#URL.ID#00%">)
)

& it wld only get u the ones with 17 in it - avoiding all the other possible combinations

HTH - run the query to chk if it solves the requirement ... it shld :)

K'Rgds
Anand
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
excpetion with multiple catch 11 105
WSUS Client Issues 52 983
Website Test Question 6 101
question about access to website 2 56
Have you ever sent email via ColdFusion and thought of tracking this mail to capture the exact date and time when the message was opened ?  If yes, then this article is for you ! First we need a table user_email with columns user_id , email , sub…
If you don't have the right permissions set for your WordPress location in IIS, you won't be able to perform automatic updates. Here's how to fix the problem.
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now