Avatar billede bramsing Nybegynder
04. august 2005 - 10:32 Der 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"

og lign. koder... Men altså.. uden success...

Jeg har haft andre spørgsmål oppe omkring denne problematik, men uden at komme løsningen nærmere.. Derfor prøver jeg endnu engang...
http://www.eksperten.dk/spm/637072
http://www.eksperten.dk/spm/637173
Avatar billede busschou Praktikant
04. august 2005 - 11:34 #1
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
Avatar billede busschou Praktikant
04. august 2005 - 11:38 #2
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
Avatar billede bramsing Nybegynder
04. august 2005 - 11:44 #3
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...
Avatar billede busschou Praktikant
04. august 2005 - 11:47 #4
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
Avatar billede busschou Praktikant
04. august 2005 - 11:49 #5
Kan du give eksempel på hvordan din tabel data ser ud?
Altså fem rækker fra hver tabel eller lignende
Avatar billede bramsing Nybegynder
04. august 2005 - 11:49 #6
Det er rigtigt at linked_tabel indeholder PT én post... altså én stemme... og den stemme er afgivet af brugerid ...
Avatar billede softspot Forsker
04. august 2005 - 11:49 #7
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?
Avatar billede busschou Praktikant
04. august 2005 - 11:52 #8
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
Avatar billede bramsing Nybegynder
04. august 2005 - 11:53 #9
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...
Avatar billede softspot Forsker
04. august 2005 - 11:54 #10
ja, bare du husker at konkatenere tabelnavne ind i strengen igen så ;)
Avatar billede bramsing Nybegynder
04. august 2005 - 11:58 #11
Har jeg gjort ;) - Jeg får følg. fejl...

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

You have an error in your SQL syntax near 'SELECT vs.navn FROM vote AS vs WHERE vs.vaelger = 'testerlige')' at line 1
Avatar billede bramsing Nybegynder
04. august 2005 - 11:59 #12
Jo men... Den skulle jo helst også virke med kun én post i busschou :/
Avatar billede busschou Praktikant
04. august 2005 - 12:08 #13
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)
Avatar billede bramsing Nybegynder
04. august 2005 - 12:24 #14
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...
Avatar billede busschou Praktikant
04. august 2005 - 12:25 #15
burde der så ikke komme 2 frem fra main_tabel ?
Avatar billede bramsing Nybegynder
04. august 2005 - 12:26 #16
glemte at skrive at i main_tabel er "navn" = "brugerid" og i linked_tabel er det "vaelger" = "brugerid"

Hvis det har nogen betydning...
Avatar billede bramsing Nybegynder
04. august 2005 - 12:27 #17
Nej... FOr jeg ber jo main_tabel om at frasortere navn<>brugerid

brugerid må jo ikke kunne stemme på sig selv... og han må kun kunne stemme én gang på de andre...
Avatar billede busschou Praktikant
04. august 2005 - 12:33 #18
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)
Avatar billede softspot Forsker
04. august 2005 - 12:37 #19
Jeg er lidt forvirret. Kan du ikke helt konkret definere tabellerne, indholdet og den SQL su fyrer af mod databasen pt.?

Jeg kunne forestille mig noget i stil med dette format til definition af tabellerne:

tabelnavn =
  felt1
+ felt2
+ felt3

og dette format til visning af indhold i databasen:

tabelnavn
felt1, felt2, felt3
felt1, felt2, felt3
felt1, felt2, felt3
Avatar billede bramsing Nybegynder
04. august 2005 - 12:38 #20
busshou >> Jo... Det er så rigtigt nok.. Men her skal linked_tabel så frasortere den ene af de to da brugerid allerede har stemt på vedkommende....


I main_tabel er der følgene poster:
Main_Tabel.navn
Testerlige
Testerlige2
testerlige3

Og i linked_tabel er der følgnede poster:
linked_tabel.navn
testerlige2

linked_tabel.vaelger
testerlige


Det skulle så gerne gøre at når alle lykker m.m. er kørt igennem, så skulle jeg gerne have en liste hvor der "kun" er "testerlige3"
Avatar billede softspot Forsker
04. august 2005 - 12:39 #21
Ved du i øvrigt hvilken version af mySQL du kører på, for subqueries ser ud til at være understøtte i begrænset omfang i versioner tidligere end 4.1
Avatar billede bramsing Nybegynder
04. august 2005 - 12:41 #22
øhhh... Er der ikke noget med at der er et SQL kald til at finde versionen ??
Avatar billede softspot Forsker
04. august 2005 - 12:42 #23
Join på

MT.navn = LT.navn

med flg. data

'Testerlige2' = 'testerlige2'

giver ikke noget resultat, for de er ikke ens... er du opmærksom på denne forskel?
Avatar billede busschou Praktikant
04. august 2005 - 12:43 #24
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
Avatar billede busschou Praktikant
04. august 2005 - 12:44 #25
den må finde alle dem hvor navnet ikke er iblandt nogen som har stemt på en allerede og navnet ikke er en selv
Avatar billede bramsing Nybegynder
04. august 2005 - 12:45 #26
Det er bare mig der kludre i tasterne... De er alle med småt... sorry...
Avatar billede softspot Forsker
04. august 2005 - 12:45 #27
på mtSQL command-line:
SHOW VARIABLES
Avatar billede softspot Forsker
04. august 2005 - 12:46 #28
ok :)
Avatar billede busschou Praktikant
04. august 2005 - 12:48 #29
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
Avatar billede busschou Praktikant
04. august 2005 - 12:49 #30
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
Avatar billede softspot Forsker
04. august 2005 - 12:49 #31
Findes der ikke et værtøj til mySQL, hvor man kan teste forespørgsler mod databasen (ligesom QueryAnalyzer til MS SQL Server)?

Det ville være et godt sted at bygge forspørgsler op.
Avatar billede bramsing Nybegynder
04. august 2005 - 12:50 #32
Det er vidst kun version 3.23.5-log jeg har på webhottelet :/
Avatar billede busschou Praktikant
04. august 2005 - 12:58 #33
bramsing >> har du prøvet med mit forslag 12:49:16 ? for som du beskriver det du ønsker så vil jeg da tro den gør det :o)
Avatar billede bramsing Nybegynder
04. august 2005 - 12:59 #34
Jeg er igang med at teste det busschou...
Avatar billede busschou Praktikant
04. august 2005 - 13:02 #35
ok
jeg var ski lidt forvirret over dit ønske til at starte med, bare at se lidt indhold i en tabel hjælper som regel på forståelsen :o)
Avatar billede bramsing Nybegynder
04. august 2005 - 13:04 #36
Fair nok... Jeg er også ved at glo mig blind på problemet... Men den giver også en fejl..

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

You have an error in your SQL syntax near 'SELECT navn FROM vote WHERE vaelger = 'testerlige') AND navn <> 'testerlige'' at line 1
Avatar billede busschou Praktikant
04. august 2005 - 13:06 #37
prøv udskrive hele sql linjen
Avatar billede bramsing Nybegynder
04. august 2005 - 13:37 #38
SELECT * FROM liste WHERE navn NOT IN (SELECT navn FROM vote WHERE vaelger = 'testerlige') AND navn <> 'testerlige'

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

You have an error in your SQL syntax near 'SELECT navn FROM vote WHERE vaelger = 'testerlige') AND navn <> 'testerlige'' at line 1
Avatar billede busschou Praktikant
04. august 2005 - 13:40 #39
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'
Avatar billede bramsing Nybegynder
04. august 2005 - 13:44 #40
Den giver samme fejl...
Avatar billede busschou Praktikant
04. august 2005 - 13:49 #41
ok så er jeg derude hvor jeg ikke er helt god nok til mysql og ikke ved om alle versioner godtager brug af Not In
Avatar billede bramsing Nybegynder
04. august 2005 - 13:53 #42
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...
Avatar billede busschou Praktikant
04. august 2005 - 13:56 #43
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
Avatar billede busschou Praktikant
04. august 2005 - 14:00 #44
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(
Avatar billede bramsing Nybegynder
04. august 2005 - 14:03 #45
Er det ikke fordi AND og <> er ASP og && og != er PHP ??? ikke fordi jeg har forstand på PHP ...
Avatar billede busschou Praktikant
04. august 2005 - 14:04 #46
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)
Avatar billede bramsing Nybegynder
04. august 2005 - 14:09 #47
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 :)
Avatar billede busschou Praktikant
04. august 2005 - 14:12 #48
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)
Avatar billede softspot Forsker
04. august 2005 - 15:05 #49
Jamen, jeg vil da ikke holde processen tilbage, selvom jeg ikke tilføjede meget til diskussionen her til sidst...
Avatar billede bramsing Nybegynder
04. august 2005 - 15:08 #50
softspot... Det er rigtigt nok... Men du hjalp jo til i det andet spørgsmål, uden point... derfor ;)
Avatar billede bramsing Nybegynder
04. august 2005 - 20:55 #51
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&"
Avatar billede busschou Praktikant
04. august 2005 - 21:17 #52
det lyder jo godt :o) og ingen skumle joins, bare lige ud og det hele :o)
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