Avatar billede ameq Nybegynder
23. januar 2004 - 10:34 Der er 25 kommentarer og
1 løsning

Hjælp til søge funktion

Hej.
Jeg har et lille problem med noget SQL til en søge funktion

Min database ser sådan der ud
company
id
name
department
id
name
faktura
company
faktura_no
faktura_date
type
department
type
id
name

Mit script loop type.id igenne og udskriver så alle de poster fra faktura tablen

Det er også findt nok, jeg får op delt dem i nogle grupper...

Men mit problem er så lige, at jeg godt vel kunne søge i de her små gruppe f.eks. vil jeg godt kun kunne tage alle poster fra faktura tablen fra et firma.

Hvordan gør man lige det...
Avatar billede ameq Nybegynder
23. januar 2004 - 10:38 #1
okey min database og sig ser ikke så god ud.. sorry for det...

Tableren er company, department, faktura, type
Avatar billede eagleeye Praktikant
23. januar 2004 - 13:17 #2
Jeg forstår ikke helt spørgsmålet vil du bygge en søgning ind eller er det sortering af outputet du mener??

Vælger alle fakture med en bestemt ID hvis der er ID i company:

SQL = "select * from faktura where company = 2"

Er du formate som tekst kan man joine de to tabller:

SQL = "select * from faktura left join company on faktura.company = company.id where company.name = 'eksperten'"
Avatar billede ameq Nybegynder
23. januar 2004 - 13:37 #3
jeg skal bruge type.id hvor at faktura.company er = 'etellerandet_id' f.eks
Avatar billede ameq Nybegynder
23. januar 2004 - 13:43 #4
select type.id as type_id, faktura.id as faktura_id, faktura.company from type, faktura where faktura.company = 6

hvis jeg execute den på min sql server så får jeg...

så får jeg 4 poster og der er kun 3 poster i min database og to af den har faktura.company som er 6 den anden 7... hvorfor får jeg dobbel?
Avatar billede eagleeye Praktikant
23. januar 2004 - 13:48 #5
fordi denne sql JOIN'er selv på kryds og tværs:
select type.id as type_id, faktura.id as faktura_id, faktura.company from type, faktura where faktura.company = 6

Derfor skal det laves i stil med den JOIN jeg har vist så man selv bestemmer hvilke kolonner der skal JOINes.

Så prøv den JOINer fakture og type tabellerne:

SQL = "select type.id as type_id, faktura.id as faktura_id, faktura.company from faktura left join type on fakture.type=type.id where company = 2"
Avatar billede eagleeye Praktikant
23. januar 2004 - 13:50 #6
det skulle hvade være company=6 ;))
Avatar billede ameq Nybegynder
23. januar 2004 - 14:19 #7
ja så skulle det virke...

men hvis nu jeg vil have at afdeling også skal med så skal jeg bare sætte en and department = 1 tilsidst i line?
Avatar billede ameq Nybegynder
23. januar 2004 - 14:22 #8
det svar var så ja... ;)
men det er bare den der where jeg skal lave min betingelser fra... eller det der... =)
Avatar billede eagleeye Praktikant
23. januar 2004 - 15:40 #9
huh?? ikke helt med hvad du mener med det sidste
Ja du kan tilføje flere ting i where delen.
Avatar billede ameq Nybegynder
26. januar 2004 - 08:11 #10
okey prøver lige at lege med det.. =) men det virker jo nok, det plejer det jo når det kommer fra dig
Avatar billede ameq Nybegynder
27. januar 2004 - 13:45 #11
okey det virkede med det blive lidt underlidt at lave den på den måde...
Så jeg har lavet det på den måde at jeg select * from faktura where company = 6 order by type

eller hvis den ikke skal have en where så select * from faktura order by type

men er der en mulighed at kunne order by type.name ?
Avatar billede ameq Nybegynder
27. januar 2004 - 13:55 #12
og hvordan ville du lave en søge funktion med disse muligheder
firma
dato(start)
dato(slut)
type
afdeling

og hvis man skal kunne søge på krys og tværs f.eks

man søger på firma og type men ikke dato og afdeling...

det enste jeg lige kan se er at jeg laver en sql str for vær mulighed men det syns jeg bare er lidt sygt!
Avatar billede eagleeye Praktikant
27. januar 2004 - 16:40 #13
select * from faktura order by type

men er der en mulighed at kunne order by type.name ?

Kun hvis du JOIN'er de to tabeller sammen kan du sortere på en kolonne i en anden tabel:

select * from faktura inner join type on fakture.type=type.id order by type.name
Avatar billede ameq Nybegynder
28. januar 2004 - 08:01 #14
strSQL = "select * from faktura where company = " & Request.Form("company") & " order by type"

så kommer den til at se sådan her ud?
strSQL = "select * from faktura inner join type on fakture.type=type.id order by type.name where company = " & Request.Form("company") & " order by type"

eller hvordan?

men hva med den der søge funktion? eller er det et nyt spg?
Avatar billede ameq Nybegynder
28. januar 2004 - 08:14 #15
det med inner join har jeg fået til at virke... og tror jeg har fattede det... eller næsten =)
Avatar billede eagleeye Praktikant
28. januar 2004 - 18:13 #16
Du skal havde samlet order by's efter where, og man kan skrive flere kolonner i order by adskift med komma:

strSQL = "select * from faktura inner join type on fakture.type=type.id where company = " & Request.Form("company") & " order by type.name, fakture.type
Avatar billede ameq Nybegynder
29. januar 2004 - 09:05 #17
okey

men har du en ide til den der søge funktion?
Avatar billede eagleeye Praktikant
29. januar 2004 - 18:00 #18
Hvad skal den søge efter??

Hvis det skal være firma kan man lave en drop-down boks som indeholder alle firma'erne. Det kunne være noget fri søgening hvor man skriver et ord i et input felt.
Man kan jo bare bygge flere kolonner på where delen efter behov, eks:
http://activedeveloper.dk/aspdigital/kapitel2/search.asp
Avatar billede ameq Nybegynder
30. januar 2004 - 08:15 #19
nej jeg har kan jeg godt det der =)

Mit problem er som jeg skriv "27/01-2004 13:55:26"

firma
dato(start)
dato(slut)
type
afdeling

og hvis man skal kunne søge på krys og tværs f.eks

man søger på firma og type men ikke dato og afdeling...

det enste jeg lige kan se er at jeg laver en sql str for vær mulighed men det syns jeg bare er lidt sygt!

Det bliver bare mange strSQL eller hvad nu man skal kalde dem hvis jeg skal tage højtet for alle mulighederne.... Så har du ikke en eller anden samrt ide til hvordan man lige løser det
Avatar billede eagleeye Praktikant
31. januar 2004 - 22:58 #20
Ja det kan bygges på som sådan her, antager der nogle søge felter på formen:
firma  startDato  slutDato  type  afdeling:

strWHERE = ""
if Request.Form("firma") <> "" then
  if strWHERE <> "" then strWHERE = strWHERE & " AND "
  strWHERE = strWHERE & "(firma = '" & Request.Form("firma") & "')"
end if
if Request.Form("startdato") <> "" then
  if strWHERE <> "" then strWHERE = strWHERE & " AND "
  strWHERE = strWHERE & "(startdato = #" & Request.Form("startdato") & "#)"
end if
if Request.Form("slutdato") <> "" then
  if strWHERE <> "" then strWHERE = strWHERE & " AND "
  strWHERE = strWHERE & "(slutdato = #" & Request.Form("slutdato") & "#)"
end if
if Request.Form("type") <> "" then
  if strWHERE <> "" then strWHERE = strWHERE & " AND "
  strWHERE = strWHERE & "(type= '" & Request.Form("type") & "')"
end if
if Request.Form("afdeling") <> "" then
  if strWHERE <> "" then strWHERE = strWHERE & " AND "
  strWHERE = strWHERE & "(afdeling= '" & Request.Form("afdeling") & "')"
end if


Så har man en where del som kan bygges ind i selv SQL'en

strSQL = "select * from faktura inner join type on fakture.type=type.id "
if strWHERE <> "" then strSQL = strSQL & " where " & strWHERE
strSQL = strSQL & " order by type.name, fakture.type"
Avatar billede ameq Nybegynder
02. februar 2004 - 13:45 #21
så kan where stren komme til at se sådan her ud? (firma = '" & Request.Form("firma") & "')(type= '" & Request.Form("type") & "') Kan man det?
Avatar billede eagleeye Praktikant
02. februar 2004 - 17:04 #22
Denne if sætning ind i hver:
if strWHERE <> "" then strWHERE = strWHERE & " AND "

Skulle gøre der kommer AND i mellem dem, så det bliver
(firma = '" & Request.Form("firma") & "') AND (type= '" & Request.Form("type") & "')
Avatar billede eagleeye Praktikant
02. februar 2004 - 17:05 #23
Man kan også bruger OR hvis den bare skal finde en af de to??
Avatar billede ameq Nybegynder
02. februar 2004 - 17:18 #24
okey nu fik jeg set det =)
tester det imorgen

vil du lige svare?
Avatar billede eagleeye Praktikant
02. februar 2004 - 17:20 #25
Ok ja så du prøve det af :)
Avatar billede ameq Nybegynder
11. marts 2004 - 12:20 #26
jeg har fundet en lille fejl...
når jeg så udskriver mit id så virker det ikke rigtig... jeg tror den skriver type.id engang imellen når jeg bare udskriver rs("id")
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