Avatar billede stauer Nybegynder
14. juli 2003 - 10:22 Der er 17 kommentarer og
1 løsning

Sortere udtræk fra DB

Hejsa

Jeg skal lave en søgning i min database. Man har mulighed for at søge på land og sector. Mit første problem er at samme virksomhed kan deltage i flere sectors, men jeg vil gerne kun have listet hvert firma engang (så selvom man søger på flere sectors og et firma deltager i flere kategorier skal det kun komme frem en gang)

Mit andet problem er at sortere mit udtræk efter lande (Countries) således at den lister i lande rækkefølge.

Countries = Request.Form("country")
ComSectors = Request.Form("sectors")

Dim i

' opbyg sql så den søger på de rigtige sectors
i = 1
For Each value in Request.Form("sectors")
  If i = 1 Then
      SQL = SQL + "sectors="&Value&" "
  Else
      SQL = SQL + "or sectors="&Value&" "
    End If
  i = i + 1
Next

' træk fra customer db og customercat (sector) db
strSQL = "SELECT * FROM customer, customercat WHERE customer.id=cust_id And ("&SQL&") And Activated='yes' Order By customer.id ASC"

Set RSCust = Conn.Execute(strSQL)
Avatar billede eagleeye Praktikant
14. juli 2003 - 10:30 #1
Prøv at sætte DISTINCT og så kun skrive den kolonnenavn som du vil havde ud:

strSQL = "SELECT DISTINCT customer.name, customer.sectors FROM customer, customercat WHERE customer.id=cust_id And ("&SQL&") And Activated='yes' Order By customer.id ASC"
Avatar billede stauer Nybegynder
14. juli 2003 - 10:50 #2
Den vil stadig skrive den samme virksomhed flere gange ikke? Lad os sige man søger på sectors 1, 2 og 3 og virksomheden har tilmeldt sig alle 3, så vil søgningen (også selvom man bruger DISTINCT) medtage den samme virksomhed 3 gange siden den er med i alle 3 sectors.. eller huh :)
Avatar billede eagleeye Praktikant
14. juli 2003 - 10:53 #3
Ja hvis du vil havde sectoren med ud så vil den blive gentaget men hvis du kan udvære sectors informationen kan du ude lade den fra selecten:

strSQL = "SELECT DISTINCT customer.name FROM customer, customercat WHERE customer.id=cust_id And ("&SQL&") And Activated='yes' Order By customer.id ASC"
Avatar billede eagleeye Praktikant
14. juli 2003 - 10:58 #4
Så kan du bare ikke havde Order By id på::

strSQL = "SELECT DISTINCT customer.name FROM customer, customercat WHERE customer.id=cust_id And ("&SQL&") And Activated='yes'"
Avatar billede stauer Nybegynder
14. juli 2003 - 11:00 #5
men hvordan kunne man så sortere resultat når man skal liste det? Så den tjekker hvis der er flere ens id springer den bare videre til næste rs
Avatar billede stauer Nybegynder
14. juli 2003 - 11:02 #6
jeg bliver nød til at have sectors med de søgningen skal vise firmaer der er tilmeldt de forskellige sectors
Avatar billede jpvj Nybegynder
14. juli 2003 - 11:05 #7
Det du vil, kan du ikke i SQL.

Du vil jo have den til at finde alle rækker, men fjerne nogen...


Du bliver nødt til at kode dig ud af det. Hvis dine output er sorteret efter firma, så må du i løkken der gennemløber alle posterne i resultsættet fjerne dem, der er gengangere.
Avatar billede eagleeye Praktikant
14. juli 2003 - 11:05 #8
Så kan man ikke også lave distinct. Hvilken sektor skal den så vælge at trække ud hvis et firma er i flere sektors?
Skal alle sektors så vises?
Avatar billede eagleeye Praktikant
14. juli 2003 - 11:08 #9
For så skal det kodes eks:

strSQL = "SELECT * FROM customer, customercat WHERE customer.id=cust_id And ("&SQL&") And Activated='yes' Order By customer.id ASC"

Set rs = Conn.Exeute(strSQL)
lastFirma = ""
do while not rs.EOF
  if lastFirma <> rs("firmaNavn") then
    response.write "<br>"
    response.write rs("firmaNavn") & "<br>"
    lastFirma = rs("firmaNavn")
    response.write "Fundet i sektor:
  else
    response.write ","
  end if
  response.write rs("sectors")
  rs.Movenext
loop
Avatar billede jpvj Nybegynder
14. juli 2003 - 11:09 #10
Kan vi ikke lige få stauer til at give os tabel definitionerne, samt et par eksempel data fra begge tabeller og til sidst det output han ønsker?
Avatar billede stauer Nybegynder
14. juli 2003 - 11:09 #11
jeg bruger ikke den sql streng til at vise hvilke sectors virksomheden er tilmeldt.. Den skal bare medtage virksomheden i søgningen hvis den er tilmeldt enten 1,2 og/eller 3..

Men hvordan kunne man bygge sådan en løkke op, det er mere det jeg fisker efter :)
Avatar billede eagleeye Praktikant
14. juli 2003 - 11:14 #12
Som vist 14/07-2003 11:08:36 princippet er at tjekke på om det er samme firmanavn som lige er blevet udskrivet
if lastFirma <> rs("firmaNavn") then

og alt efter om det er føste gang det skal udskrives eller nanvet lige er udskriver så gør noget forskelligt. Hvis navnet på firmaet lige er vist udskrives et ","
Avatar billede stauer Nybegynder
14. juli 2003 - 11:28 #13
jep sad lige og skrev kommentaren inden jeg så svaret :=)
Jeg prøver det lige af
Avatar billede stauer Nybegynder
14. juli 2003 - 11:38 #14
Jeg har ændret det så den tjekker på customer.id istedet
og det virker fint.. nu er det sådan at hver virksomhed kommer fra bestemte lande som i db er defineret med tal fra 1-19, så loopet skal samtidig tjekke på hvad rs("country"), og dele resultat op per land.. any suggestions :)
       
                lastID = ""
        do while not rs.EOF
          if lastID <> rs("customer.id") then
            response.write "<br>"
            response.write rs("s1_1") & "<br>"
            lastID = rs("customer.id")
            response.write "Fundet i sektor:"
          else
            response.write ","
          end if
          response.write rs("sectors")
          rs.Movenext
        loop
Avatar billede stauer Nybegynder
14. juli 2003 - 11:40 #15
>eagleeye bruger du msn? Jeg ville lige høre om noget freelance
Avatar billede eagleeye Praktikant
14. juli 2003 - 11:45 #16
På samme måde med hensyn til land. Du skal bare lave din ORDER BY så den sortere på land.


        lastID = ""
        lastCountry = ""
        do while not rs.EOF
          if lastCountry <> rs("country") then
            response.write "<br>"
            Response.Write "Country : " & rs("country") & "<br>"
            lastCountry = rs("country")
          end if

          if lastID <> rs("customer.id") then
            response.write "<br>"
            response.write rs("s1_1") & "<br>"
            lastID = rs("customer.id")
            response.write "Fundet i sektor:"
          else
            response.write ","
          end if
          response.write rs("sectors")
          rs.Movenext
        loop
Avatar billede hossein Nybegynder
14. juli 2003 - 11:52 #17
Du kan gøre det meget nemmer for dig selv at lave en eller flere Query i selve access også kalde den query som indeholder resultatet fra asp siden.
Avatar billede stauer Nybegynder
14. juli 2003 - 12:37 #18
aloha

jeg vil gerne have defineret et landenavn istedet for det tal som jeg bruger i min customer tabel. Jeg har en anden tabel der hedder country hvor jeg har country.id og country.country (for navnet på landet)

Men hvordan sammenligner jeg resultatet, jeg har prøvet med det her, men kan godt se at min asp evner ikke er helt i top :)

if lastCountry <> rs("s1_5") then
response.write "<br>"
Country = rs("s1_5")
Response.Write("Country : " & Country(rsCountry("id")=rsCountry("country")) &"<br>")
lastCountry = rs("s1_5")
end if
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester