/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Umuligt måske
Fra : Anders Lund


Dato : 27-10-01 12:47

Jeg tror selv at dette er umuligt, men det kan være at det er et klogt
hoved det har en ide.

Jeg har en tabel med en masse felter, blandt andet et med et brugernavn.
Brugernavnet kan enten været et alm navn (fx 'Anders') eller en id nummer på
brugerens post i en anden tabel, disse starter med FN (fx 'FN501')

Nu vil jeg så gerne have en select, hvor jeg bare for feltet udskrevet hvis
det ikke står FN. Hvis det står FN først skal den hente brugernavnet i en
anden tabel, ved posten hvor id er li med det der står efter FN.

Kan det lade sig gøre?

Et anternativ ville være at leve det fra min kode (ASP), men der ryger jo en
del profromance hvis jeg skal lave en query ved hver post.


På fårhånd tak for hjælpen!

--
Mvh
Anders Lund
Anders@itnews.dk
Webmaster for www.GEnet.dk, Jyllands bedste netparty



 
 
Anders Holbøll (27-10-2001)
Kommentar
Fra : Anders Holbøll


Dato : 27-10-01 12:58

Anders Lund wrote:
>
> Jeg har en tabel med en masse felter, blandt andet et med et
> brugernavn.
> Brugernavnet kan enten været et alm navn (fx 'Anders') eller
> en id nummer på brugerens post i en anden tabel, disse starter
> med FN (fx 'FN501')
>
> Nu vil jeg så gerne have en select, hvor jeg bare for feltet
> udskrevet hvis det ikke står FN. Hvis det står FN først skal
> den hente brugernavnet i en anden tabel, ved posten hvor id
> er li med det der står efter FN.

Du skriver ikke hvilket database-produkt du bruger, så du bruger jo nok
access eller mysql. Din data datamodel lyder også ganske grim.

Hvis du bruger access, kunne det se sådan ud (Her er der ikke taget
højde for at nogle brugernavne kan starte med FN, eks. vil en bruger med
navnet 'FNIDDER' få systemet til at fejle):
SELECT b.brugernavn
FROM bruger b
WHERE NOT b.brugernavn LIKE 'FN%'
UNION
SELECT eat.navn
FROM bruger b
INNER JOIN EnAndenTabel eat ON eat.id=CONVERT(INT, MID(brugernavn, 3))
WHERE brugernavn LIKE 'FN%'
ORDER BY 1

--
Anders

Anders Lund (27-10-2001)
Kommentar
Fra : Anders Lund


Dato : 27-10-01 17:01

> Du skriver ikke hvilket database-produkt du bruger, så du bruger jo nok
> access eller mysql. Din data datamodel lyder også ganske grim.
Hvad mener du med grim? og hvad er det der er grimt?
Jeg bruger Mysql!

> Hvis du bruger access, kunne det se sådan ud (Her er der ikke taget
> højde for at nogle brugernavne kan starte med FN, eks. vil en bruger med
> navnet 'FNIDDER' få systemet til at fejle):
> SELECT b.brugernavn
> FROM bruger b
> WHERE NOT b.brugernavn LIKE 'FN%'
> UNION
> SELECT eat.navn
> FROM bruger b
> INNER JOIN EnAndenTabel eat ON eat.id=CONVERT(INT, MID(brugernavn, 3))
> WHERE brugernavn LIKE 'FN%'
> ORDER BY 1
Overståede kan jeg ikke få til at virke. Ville det ikke blive en del
simplere (og smukkere) hvis jeg lavede 2 felter. Et til id og et til
brugernavn.
Hvis du endnu engang ville komme med et forskal gille jeg blive meget glad!



--
Mvh
Anders Lund
Anders@itnews.dk
Webmaster for www.GEnet.dk, Jyllands bedste netparty



Anders Holbøll (27-10-2001)
Kommentar
Fra : Anders Holbøll


Dato : 27-10-01 18:33

Anders Lund wrote:
>
> > Du skriver ikke hvilket database-produkt du bruger, så du
> > bruger jo nok access eller mysql. Din data datamodel lyder
> > også ganske grim.
> Hvad mener du med grim? og hvad er det der er grimt?

At skulle til at lave logik på værdierne i tekstfelter for at lave et
join, er imho ikke pænt.
(Ikke fordi, at man skal hænge sig i det, men det er vist et af kravene
til en af de første normalformer)

> Jeg bruger Mysql!

På skal du nok skifte funktionen "Mid" ud med "Substr" og bruge en anden
join-syntax.

> > [sql]
> Overståede kan jeg ikke få til at virke.

Så må du jo se, om du kan se hvad ideen i det er og prøve at *få* det
til at virke.

> Ville det ikke blive en del simplere (og smukkere) hvis jeg
> lavede 2 felter. Et til id og et til brugernavn.

Jo, og måske hurtigere, da databasen så kan gøre brug af nogle indekser
(måske ikke i netop denne sql, men...)

> Hvis du endnu engang ville komme med et forskal gille jeg
> blive meget glad!

Jeg bruger ikke mysql (den understødter imho alt for lidt sql til at
være rar). Jeg kunne naturligvis stykke noget sammen ud fra manualen (
http://www.mysql.com/doc/ ), men det kan du ligeså godt.

--
Anders

camraz (09-11-2001)
Kommentar
Fra : camraz


Dato : 09-11-01 13:16

Hej Anders,

> Jeg har en tabel med en masse felter, blandt andet et med et brugernavn.
> Brugernavnet kan enten været et alm navn (fx 'Anders') eller en id nummer

> brugerens post i en anden tabel, disse starter med FN (fx 'FN501')
>
> Nu vil jeg så gerne have en select, hvor jeg bare for feltet udskrevet
hvis
> det ikke står FN. Hvis det står FN først skal den hente brugernavnet i en
> anden tabel, ved posten hvor id er li med det der står efter FN.
>
> Kan det lade sig gøre?
>

Ja da!

Du skal bruge LEFT JOIN til at udvælge navnet fra den anden tabel.
Så vil feltet med navnet fra den anden tabel være NULL hvis der ikke kunne
joines,
eller navn hvis der kunne joines.

Alt hvad du herefter behøver er i din SELECT-frase at vælge navnet fra den
anden
tabel hvis det ikke er NULL, og ellers brugernavnet fra den første tabel.
Det kan du gøre
med MySQLs IFNULL-funktion.

Altså noget i stil med:

---
SELECT IFNULL(tabel2.navn, tabel1.brugernavn) as nybruger
FROM tabel1
LEFT JOIN tabel2 ON tabel1.navnid = tabel2.id;
---

Se evt. MySQL-dokumentationen i afsnittet om Control Flow Functions.

God fornøjelse,

Carsten Mølgaard Rasmussen
Tele 0 Europe ApS
www.tele0.com



Søg
Reklame
Statistik
Spørgsmål : 177517
Tips : 31968
Nyheder : 719565
Indlæg : 6408636
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste