04. august 2005 - 10:32Der er
50 kommentarer og 2 løsninger
mySQL - Main_tabel med frasortering af linked_tabel
Hejsa.. Jeg har forsøgt at rode rundt i noget relationstabel eller hvad det nu hedder...
Jeg har 2 tabeller "main_tabel" og "linked_tabel"
"main_tabel" består af flg. felter: "navn" "valg" "valgstart" og "valgslut"
"linked_tabel" består af flg. felter: "navn" "vaelger" "valgt" "valgslut"
Det er så sådan at brugeren der skal ind og stemme ikke kan se sig på listen (main_tabel/navn <> brugerid) og må heller ikke kunne se de brugere (main_tabel/navn) som han allerede har sat sin stemme på (linked_tabel/vaelger <> brugerid)
Jeg vil mene at de to tabeller bliver linket sammen via "navn" og frasorteringen skal ske via "vaelger"
Jeg har forsøgt med bl.a. følgende koder men uden held...
rsSQLstem = "SELECT * FROM "&main_tabel&" AS MT INNER JOIN "&linked_tabel&" AS LT ON MT.navn = LT.navn " rsSQLstem = rsSQLstem & "WHERE MT.navn <> '"&brugerid&"' " rsSQLstem = rsSQLstem & "AND MT.valgslut >= CURDATE() " rsSQLstem = rsSQLstem & "AND LT.vaelger <> '"&brugerid&"' " rsSQLstem = rsSQLstem & "AND MT.navn NOT IN " rsSQLstem = rsSQLstem & "(SELECT vs.navn FROM "&linked_tabel&" AS vs WHERE LT.vaelger = '"&brugerid&"')"
og
rsSQLstem = "SELECT * FROM "&main_tabel&","&linked_tabel&" WHERE "&main_tabel&".navn <> '"&brugerid&"' AND "&main_tabel&".valgslut >= CURDATE() AND "&main_tabel&".navn = "&linked_tabel&".navn"
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
1) Hvis du ønsker at gøre det gennem din query i mysql, så forstår jeg ikke hvorfor du har lukket dit spørgsmål i mysql kategorien, da det er der eksperterne på det område sidder 2) Hvis du bare vil have det til at virke så kan du jo hive det hele ud og derefter lave en masse løkker i asp som sikrer man kun ser det man skal se
jeg er ikke haj i sql endnu, så en løsning kunne være at lave to udtræk Select * From main_tabel Where navn <> brugerid Select * From vaelger_tabel Where vaelger <> brugerid og så udskrive derfra
busschou Den løsning har jeg prøvet... Men så kommer der ikke noget ud overhovedet...
Og grunden til at lukkede spørgsmålet i mySQL var at der ikke kom nogen reaktion på det... så jeg blev i tvivl om det var det rigtige sted jeg havde oprettet spørgsmålet...
Man kan ikke altid regne med en reaktion med det samme :o) Hvis du har prøvet at lave to sql sætninger som i min kommentar 11:38:01 og du absolut ingenting har fået ud Så betyder det at der er et og andet riv ruskende galt For så er der i main_tabel ikke nogen navne forskellige fra brugerid og i linked_tabel ikke nogen vaelger forskellige fra brugerid
Skal du ikke skifte det sidste alias ud i din subquery(?):
rsSQLstem = "SELECT * FROM main_tabel AS MT INNER JOIN linked_tabel AS LT ON MT.navn = LT.navn " rsSQLstem = rsSQLstem & "WHERE MT.navn <> '"&brugerid&"' " rsSQLstem = rsSQLstem & "AND MT.valgslut >= CURDATE() " rsSQLstem = rsSQLstem & "AND LT.vaelger <> '"&brugerid&"' " rsSQLstem = rsSQLstem & "AND MT.navn NOT IN " rsSQLstem = rsSQLstem & "(SELECT vs.navn FROM linked_tabel AS vs WHERE vs.vaelger = '"&brugerid&"')"
Jeg går ud fra at dine tabeller rent faktisk hedder main_table og linked_table i databasen, i så fald er det ikke nødvendigt at konkatenere dem ind i SQL-udtrykket, de kan bare skrives som en del af strengen.
Jeg har kigget lidt på SQL-syntaks på dev.mysql.com og konstateret at både syntaks for alias, subquery og (NOT) IN er god nok, så jeg vil bare lige høre dig hvilken fejl du får hvis du fyrer det statement af mpd databasen?
ok jeg vil da bare foreslå dig at fyre lidt mere ind i tabellerne så For at teste på en tabel kun indeholdende een række og det oven ikøbet en række som man ikke vælger med Så skal man ski være godt inde i Joins osv for at være 100 på det også virker når der er 1000 forskellige rækker
softspot -- Tabellerne hedder noget andet... derfor "&main_tabel&" og "&linked_tabel&" .. Jeg prøver lige engang med ovenstående og ser om der kommer fejl...
ja det er sandt bramsig! jeg er enig Men hvis du kun har een post og det endda er en du ikke skal have med i dit resultat Så er du efter min mening pokkers heldig hvis det også virker når du har flere poster -- Hvis man ikke har helt styr på det man laver er min erfaring at det er en god ide at tage forskellige tilfælde med i sine tests -- Når nu du får lavet din sql sætning og du ikke får noget resultat, så er det meningen, fordi du ikke ønsker den ene række du har skal med i resultatet Misforstå mig ikke, men jeg kunne skrive 1000 sql sætninger som opfylder det krav Her er en: Select * From linked_tabel Where navn = 'zxlvksdv' Den vil ikke give dig noget resultat fordi ingen har det navn Men det er ikke det samme som den virker efter hensigten når du har brugbar data i tabellen --- anyway er min pointe bare at jeg synes det er en god ide at have brugbar data i sin tabel. Ikke 1000 linjer bare 5-10 linjer så man kan se om man får det man ønsker og så man har noget at debugge ud fra hvis man ikke får det man ønsker Specielt når man ikke er stærk i sql, hvilket jeg ikke selv er Men det kan da være du er heldig at softspot lige klarer den for dig :o)
busschou... Jeg er helt enig... og i og for sig burde det også virke.. I main_tabel er der 3 unikke poster hvor den ene er identisk med "brugerid" og i linked_tabel er der 1 post... der også er identisk med "brugerid" Det gør så at der burde komme én post frem på listen...
bramsig >> ja, kl 12:24:33 sagde du at main_tabel består af 3 rækker hvoraf den ene er identisk med brugerid. Så må der da også være 2 tilbage fra main_tabel? ;o)
okey så det du ønsker er at du vil vise alle dem i main_tabel hvor navn ikke forekommer i linked table samtidig med at vaelger er lig brugerid hvad så med select * from main_tabel where navn not in (select vaelger from linked_tabel where navn = brugerid) and navn<>brugerid
det er mulig jeg byttede om på navn og vaelger, var lidt forvirret ---- select * from main_tabel where navn not in (select navn from linked_tabel where vaelger = brugerid) and navn<>brugerid ---- det må svare til select * from main_tabel where navn not in (select vaelger from linked_tabel where navn = testerlige) and navn<>brugerid som svarer til select * from main_tabel where navn not in (testerlige2) and navn<>brugerid som svarer til select * from main_tabel where navn not in (testerlige2) and navn<>testerlige som svarer til testerlige3 som ønsket
og i min udregning kan jeg så se jeg igen byttede om på vaelger og navn i under queryen ---- select * from main_tabel where navn not in (select navn from linked_tabel where vaelger = brugerid) and navn<>brugerid ---- det må svare til select * from main_tabel where navn not in (select navn from linked_tabel where vaelger = testerlige) and navn<>brugerid som svarer til select * from main_tabel where navn not in (testerlige2) and navn<>brugerid som svarer til select * from main_tabel where navn not in (testerlige2) and navn<>testerlige som svarer til testerlige3 som ønsket
hmm det ser godt nok ud i mine øjne. Kan det være fordi den ikke kan skildne de to typer navn måske? SELECT * FROM liste WHERE liste.navn NOT IN (SELECT vote.navn FROM vote WHERE vote.vaelger = 'testerlige') AND liste.navn <> 'testerlige'
Jeg er ved at skrive til min Webhost for at høre om jeg kan blive flyttet over på deres nyeste server.. Det skulle være en mySQL 4.1.11 så der håber jeg at det vil virke...
Ja for umiddelbart vil jeg altså mene at den sql sætning vil gøre det At man først/inderst vælger alle dem det ikke må være og så yderst vælger alle dem som ikke er iblandt dem det ikke må være, lige med et plus at det ikke må være en selv
jeg har kigget lidt og det står tilsyneladende en frit for i mysql at benytte "And" eller "&&" og tilsvarende at benytte "<>" eller "!=" Altså de burde betyde det samme de operatorer men om det måske er det der går galt? Jeg er nok ikke nok inde i mysql desværre :o(
jo det kunne man jo måske komme til at forestille sig Men sql er sql, og du laver det jo som en streng som din mysql server så skal fortolke, og den har intet med hverken asp eller php at gøre :o)
Well... Det hjalp ikke... Men der kom nu heller ikke andre fejl...
Men jeg tænkte på om vi - indtil nu - har gjort hvad der er muligt og jeg derved lukker spørgsmålet, så det ikke kommer frem på listen over åbne... Jeg vil så prøve at arbejde videre med jeres løsning når jeg er kommet over på den nye mySQL server og skulle der være behov for yderligere hjælp åbner jeg gerne et lign. sørgsmål ;)
Men jeg vil meget gerne give jer begge point for jeres indsats indtil nu... Så hvis I begge lægger et svar deler jeg point'ne mellem jer :)
jeg svarer gerne :o) Men jeg synes hvis der dukker mere op at du skal spørge i mysql kategorien eftersom der der sidder nogen som er mere eksperter på området, omend de ikke lige svarer den første dag :o)
Ville bare lige sige at nu er jeg kommet over på den nye server og det hele virker nu :) Såå... Tak for kampen drenge.... Det er busschou's metode som stod i scriptet som jeg har brugt.. og det virker...
SELECT * FROM "&main_tabel&" WHERE "&main_tabel&".navn NOT IN (SELECT "&linked_tabel&".navn FROM "&linked_tabel&" WHERE "&linked_tabel&".vaelger = '"&brugerid&"') && "&main_tabel&".navn != "&brugerid&"
det lyder jo godt :o) og ingen skumle joins, bare lige ud og det hele :o)
Synes godt om
Ny brugerNybegynder
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.