Solved

For Anand:  Help with list and query

Posted on 2003-11-15
6
263 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Back Up Your Microsoft Windows Server®

Back up all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

 
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

Transaction Monitoring Vs. Real User Monitoring

Synthetic Transaction Monitoring Vs. Real User Monitoring: When To Use Each Approach? In this article, we will discuss two major monitoring approaches: Synthetic Transaction and Real User Monitoring.

Question has a verified solution.

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

When it comes to showing a 404 error page to your visitors, you do not want that generic page to show, and you especially do not want your hosting provider’s ad error page to show either. In this article, I will show you how to enable the custom 40…
What You Need to Know when Searching for a Webhost Provider
Come and listen to Percona CEO Peter Zaitsev discuss what’s new in Percona open source software, including Percona Server for MySQL (https://www.percona.com/software/mysql-database/percona-server) and MongoDB (https://www.percona.com/software/mongo-…
NetCrunch network monitor is a highly extensive platform for network monitoring and alert generation. In this video you'll see a live demo of NetCrunch with most notable features explained in a walk-through manner. You'll also get to know the philos…

717 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