webForumDet fria alternativet

Söka från två ställen

Databaser & SQL

26 svar · 711 visningar · startad av Lorelie

Medlem sedan juni 2005264 inlägg
Frågan#1

Jag har en databas där man kan söka efter stamboksnummer, eller rättare sagt få upp en lista i nummerordning. En del hästar är exporterade från det landet, och då kommer inte de upp i sitt gamla lands lista som därmed inte blir komplett.
Har två olika stamboksnummer i databasen, den nya med tillhörande stamboksbetäckning (aktuell) och den gamla med dito (förra).
Kan man få med de gamla i en lista på aktuella hästar? Alltså att man får upp en komplett lista i nummerordning, även om hästen i fråga har ett annat stamboksnummer nu, helst ska den hamna på platsen för det gamla nummret.

Såhär ser det ut när man får upp listan för "IRE" i nummerordning


SQL = "SELECT 	namn,			" & _
"hast_id,					" & _
"bild_url					" & _
"  FROM 		hast 			" & _
"WHERE 		kon = '"& SafeSQL(Request.Form("kon")) &"' 	  "& _
"AND 	namn  like  '" & SafeSQL(Request.Form("hast"))&"%' 	" & _
"AND	stamboks_nr is not null 				" & _
"AND 	namn	<>		'e'			" & _
"AND	namn	<>		'u'			" & _
"AND	namn    <>		'&nbsp;'			" & _
"AND	ras    <>		           'Övrig'			" & _
"AND 	ras	=		'IRE'			" & _
"	ORDER BY 	stamboks_nr			"

utlstbnr och utlstb heter kollumnerna jag vill ha med resp. få dem som inte hör till IRE numera ska sorteras efter.
Dvs blanda nya och gamla nummer

Någon som hängde med i förklaringen :OO :q

Medlem sedan dec. 200012 464 inlägg
#2

Exemplifiera med datainnehåll och förväntat resultat.

Flyttas från ASP

Medlem sedan dec. 20025 483 inlägg
#3

Skriv gärna ut och formattera SQL:en också:

response.write SQL
Medlem sedan juni 2005264 inlägg
#4

SELECT namn, hast_id, bild_url FROM hast WHERE kon = 'Hingst' AND namn like '%' AND stamboks_nr is not null AND namn <> 'e' AND namn <> 'u' AND namn <> ' ' AND ras <> 'Övrig' AND ras = 'IRE' ORDER BY stamboks_nr

Min första förklaring var visst väldigt luddig ser jag nu =S
Här kommer ett nytt försök till att beskriva vad jag vill:

Jag vill i första hand ha det nya nummret (IRE), och har den ett gammalt IRE-nummer (står i en annan kollumn) ska den också vara med i IRE-listan.
Vilken bok hästen tillhör står på ett ställe (tex nr 1 i stambok IRE), sen har den ev. ett gammalt nummer också (tex nr 2 i stambok IRE, då kanske den heter nr 10 i stambok Connemara)

(exempel
Namn: Roundstone Chief
Stamboksnummer 1
Stambok Connemara
Utländska stamboksnummer 151
stambok IRE )

När man letar efter honom kommer han upp i den svenska nummerordningen (Connemara), men jag vill att han även ska hamna på platsen för 151 när man söker efter IRE-hästar

Medlem sedan dec. 20025 483 inlägg
#5

Det vore bättre om du kan ge exempel på tabellinnehåll

---------------------------------
hast_id | namn | bild_url   | ...
---------------------------------
   1    | åke  | [url]http://.[/url].. | ...
   2    | ann  | [url]http://.[/url].. | ...
...

Samt vilket resultat som förväntas

------------------------------------
namn  | utlstbnr | utlstb | ras |...
------------------------------------
ann   | ...
...
Medlem sedan juni 2005264 inlägg
#6
-------------------------------------------------------------------
hast_id | namn                | stb_nr | ras*             | utlstbnr  | utlstb
------------------------------------------------------------------------
   3     | Roundstone Chief |1        |  Connemara | 151        | IRE
10068  | Win Lorenzo        | 142   | IRE            | NULL      | NULL
       
...

Såhär vill jag att resultatet ska bli:
Win Lorenzo IRE 142
Royal Chieftain IRE 143
Gay Lorenzo IRE 144
Mac Mawgan IRE 148
Glenarde IRE 149
Roundstone Chief RC 1
Harvest Moon IRE 152
Moycullen Bobby IRE 154
Heather Legend IRE 156

Alla som har ett IRE-nummer har IRE i kolumnen ras, men Roundstone Chief har "Connemara" där, men IRE i utlstb. Dessutom vill jag enbart ha med "IRE" från utlstb (Det finns flera beteckningar)

* Ras är fel, igentligen ska det stå stambok, men det är av ren lathet det inte är ändrat... jag vet ju vad jag menar ändå

Medlem sedan dec. 20025 483 inlägg
#7

Använder du Access?

select namn
     , ras
     , stb_nrl
  from hast
 where 'IRE'
    in (ras,utlstb)
   and kon = '" & SafeSQL(Request.Form("kon")) & "'
   and namn like '" & SafeSQL(Request.Form("hast")) & "%'
   and namn
not in ('e','u','&nbsp;')
order
    by iif(isnull(utlstbnr),stb_nrl,utlstbnr)
Medlem sedan juni 2005264 inlägg
#8

Peter S skrev:

Använder du Access?

Nej, MySQL

Medlem sedan juni 2005264 inlägg
#9

Peter S skrev:

Använder du Access?

select namn
     , ras
     , stb_nrl
  from hast
 where 'IRE'
    in (ras,utlstb)
   and kon = '" & SafeSQL(Request.Form("kon")) & "'
   and namn like '" & SafeSQL(Request.Form("hast")) & "%'
   and namn
not in ('e','u','&nbsp;')
order
    by iif(isnull(utlstbnr),stb_nrl,utlstbnr)

Provade att lägga in detta, och fick felmeddelandet "Expected Case" på rad 22, rad 22 är select namn

Sen visades 'IRE' som en komentar, så jag ändrade till ", det kanske man inte kan?

Medlem sedan dec. 20025 483 inlägg
#10
select namn
     , ras
     , stb_nrl
  from hast
 where 'IRE'
    in (ras,utlstb)
   and kon = '" & SafeSQL(Request.Form("kon")) & "'
   and namn like '" & SafeSQL(Request.Form("hast")) & "%'
   and namn
not in ('e','u','&nbsp;')
order
    by coalesce(utlstbnr,stb_nrl)
SQL = _
"select namn" &_ 
"     , ras" &_
"     , stb_nrl" &_
"  from hast" &_
" where 'IRE'" &_
"    in (ras,utlstb)" &_
"   and kon = '" & SafeSQL(Request.Form("kon")) & "'" &_
"   and namn like '" & SafeSQL(Request.Form("hast")) & "%'" &_
"   and namn" &_
"not in ('e','u','&nbsp;')" &_
"order" &_
"    by coalesce(utlstbnr,stb_nrl)" &_
Medlem sedan juni 200032 967 inlägg
#11

Provade att lägga in detta, och fick felmeddelandet "Expected Case" på rad 22, rad 22 är select namn

Eftersom det är en SQL-fråga måste du göra som du brukar, lägga i en sträng. Du kan inte bara kasta in dessa rader i ASP-koden.

SQL = "select namn " & _
      "     , ras" & _
...
...

I övrigt fungerar inte iif() i MySQL, utan där använder du case istället. Så byt iif-uttrycket mot:

case when utlstbnr is null then stb_nrl else utlstbnr end

edit: eller coalesce som Peter skriver.

Medlem sedan juni 2005264 inlägg
#12

Peter S skrev:


SQL = _
"select namn" &_ 
"     , ras" &_
"     , stamboks_nr" &_
"	  , bild_url" & _
"  from hast" &_
" where 'IRE'" &_
"    in (ras,utlstb)" &_
"   and kon = '" & SafeSQL(Request.Form("kon")) & "'" &_
"   and namn like '" & SafeSQL(Request.Form("hast")) & "%'" &_
"   and namn" &_
"not in ('e','u','&nbsp;')" &_
"order" &_
"    by coalesce(utlstbnr,stamboks_nr)" &_

Det blir felmeddelande "unexpected "new line"" på rad 36, det är efter att kodsnutten är slut, plockar jag bort &_ (på de gamla koderna slutar det med ") så får jag ett annat meddelande (Unknown column 'namnnot' in 'where clause' på rs.Open SQL, MinCon, så det antar jag är helfel, satte tillbaka &_ igen)

Medlem sedan dec. 20025 483 inlägg
#13

Nu så :)

SQL = _
"select namn" &_ 
"     , ras" &_
"     , stamboks_nr" &_
"	  , bild_url" & _
"  from hast" &_
" where 'IRE'" &_
"    in (ras,utlstb)" &_
"   and kon = '" & SafeSQL(Request.Form("kon")) & "'" &_
"   and namn like '" & SafeSQL(Request.Form("hast")) & "%'" &_
"   and namn " &_
"not in ('e','u','&nbsp;') " &_
"order" &_
"    by coalesce(utlstbnr,stamboks_nr)"
Medlem sedan juni 2005264 inlägg
#14

Peter S skrev:

Nu så :)

SQL = _
"select namn" &_ 
"     , ras" &_
"     , stamboks_nr" &_
"	  , bild_url" & _
"  from hast" &_
" where 'IRE'" &_
"    in (ras,utlstb)" &_
"   and kon = '" & SafeSQL(Request.Form("kon")) & "'" &_
"   and namn like '" & SafeSQL(Request.Form("hast")) & "%'" &_
"   and namn " &_
"not in ('e','u','&nbsp;') " &_
"order" &_
"    by coalesce(utlstbnr,stamboks_nr)"

Det gick mycket bättre :e
Men sorteringen är lite skum

Dynamite
Kingstown Rory
Coolfin Bobby
Grey Fox of Ard IRE
Cannon Ball IRE 1
Bryan IRE 10
Connemara Mick IRE 100
Glowes Misty Owen IRE 1000
Kylemore Rocky IRE 1001

osv

Vill inte ha med dem utan nummer heller,
"AND stamboks_nr is not null " & _ stod det innan för att få bort dem, men det fungerade inte här

Medlem sedan dec. 20025 483 inlägg
#15

Att lägga till AND... borde inte vara några problem. Har du testat

SQL = _
"select namn" &_ 
"     , ras" &_
"     , stamboks_nr" &_
"	  , bild_url" & _
"  from hast" &_
" where 'IRE'" &_
"    in (ras,utlstb)" &_
"   and kon = '" & SafeSQL(Request.Form("kon")) & "'" &_
"   and namn like '" & SafeSQL(Request.Form("hast")) & "%'" &_
"   and namn " &_
"not in ('e','u','&nbsp;') " &_
"   and stamboks_nr is not null " &_
"order" &_
"    by coalesce(utlstbnr,stamboks_nr)"
Medlem sedan juni 2005264 inlägg
#16

Peter S skrev:

Att lägga till AND... borde inte vara några problem. Har du testat

SQL = _
"select namn" &_ 
"     , ras" &_
"     , stamboks_nr" &_
"	  , bild_url" & _
"  from hast" &_
" where 'IRE'" &_
"    in (ras,utlstb)" &_
"   and kon = '" & SafeSQL(Request.Form("kon")) & "'" &_
"   and namn like '" & SafeSQL(Request.Form("hast")) & "%'" &_
"   and namn " &_
"not in ('e','u','&nbsp;') " &_
"   and stamboks_nr is not null "
"order" &_
"    by coalesce(utlstbnr,stamboks_nr)"

Det var så jag gjorde "Expected Identifier"

Edit: har ju missat &_ på slutet där =) Nu fungerar det

Men hur får jag dem sorterade i nummerordning? Nu är de sorterade efter första siffran, dvs 1,10,100,1000, 1001 osv

Medlem sedan dec. 20025 483 inlägg
#17

Inlägget ovan redigerat: jag glömde &_.

Medlem sedan dec. 20025 483 inlägg
#18

Lorelie skrev:

Men hur får jag dem sorterade i nummerordning? Nu är de sorterade efter första siffran, dvs 1,10,100,1000, 1001 osv

Är inte det i nummerordning?

Medlem sedan juni 2005264 inlägg
#19

Peter S skrev:

Är inte det i nummerordning?

joo, men jag vill ha 1,2,3,4,5,6 osv, inte 1,10, 11, 12, 100, 101, 143, 1000, 1001, 2, 20, 26, 201 osv

Medlem sedan dec. 20025 483 inlägg
#20

Är stamboksnumren lagrade som strängar? Om dessa alltid är numeriska bör du ändra kolumndefinitionerna så att de lagras som tal.

262 ms totalt · 4 externa anrop · v20260731065814-full.868a69e5
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)