Solved

For Anand:  Help with list and query

Posted on 2003-11-15
6
258 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
Connect further...control easier

With the ATEN CE624, you can now enjoy a high-quality visual experience powered by HDBaseT technology and the convenience of a single Cat6 cable to transmit uncompressed video with zero latency and multi-streaming for dual-view applications where remote access is required.

 
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

Easy, flexible multimedia distribution & control

Coming soon!  Ideal for large-scale A/V applications, ATEN's VM3200 Modular Matrix Switch is an all-in-one solution that simplifies video wall integration. Easily customize display layouts to see what you want, how you want it in 4k.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

A web service (http://en.wikipedia.org/wiki/Web_service) is a software related technology that facilitates machine-to-machine interaction over a network. This article helps beginners in creating and consuming a web service using the ColdFusion Ma…
Introduction This article explores the design of a cache system that can improve the performance of a web site or web application.  The assumption is that the web site has many more “read” operations than “write” operations (this is commonly the ca…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

792 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