Kan det lade sig gøre via én query til databasen, at finde alle tilfælde hvor der er både IDFra og IDTil med samme ID.
Altså eksempelvis hvis jeg gerne vil checke om det forefindes med et ID som er 1, får jeg både IDTil returneret som i dette tilfælde vil være 2 og 3. Forespørger jeg med et ID som er 2, får jeg kun 1 returneret. Forespørger jeg med ID som er 4, får jeg intet returneret.
Det har været lidt svært for mig at forklare, præcis hvad jeg mener. Men håber I forstår pointen - ellers vil jeg gerne prøve at forklare mig anderledes!
mysql> select distinct id1 from test where id1=1 and id1 in (select distinct id2 from test where id2=1); +------+ | id1 | +------+ | 1 | +------+ 1 row in set (0.00 sec)
mysql> select distinct id1 from test where id1=2 and id1 in (select distinct id2 from test where id2=2); +------+ | id1 | +------+ | 2 | +------+ 1 row in set (0.00 sec)
mysql> select distinct id1 from test where id1=4 and id1 in (select distinct id2 from test where id2=4); Empty set (0.00 sec)
function isDoubleId($id) { $result = false; mysql_connect(); $sql = "select distinct id1 from test where id1={$id}" . " and id1 in (select distinct id2 from test where id2={$id})"; $ds = mysql_query($sql); if(mysql_num_rows($ds)) $result = true; mysql_close(); return $result; }
Tak for dit svar. Det virker som noget der ligner den rigtige løsning. Omend jeg dog ikke helt kan få det til at fungere.
Jeg bruger følgende query på min database (modificeret version af din):
SELECT DISTINCT ID1 FROM matchprofile WHERE ID2 = ? AND ID2 IN (SELECT DISTINCT ID1 FROM matchprofile WHERE ID1 = ?)
Men jeg får alligevel et udtræk, hvor den det ID som jeg forespørg på kun eksisterer i ID1 kolonnen.. Er du sikker på, at din løsning er helt korrekt - eller er det bare mig som ikke implementerer den ordenligt? :=)
Mit svar gik ud på at kunne fortælle om en given ID findes som både en ID1 og som en ID2. Altså et spørgsmål, som der kan svares Ja eller Nej på. Hvis du får en record med et felt (ID1) så er svaret Ja. Hvis du får et tomt dataset, så er svaret Nej.
Hvis du kigger lidt nærmere på mit indlæg #7, så vil du se, at hvis du tester 1, 2 eller 3 - så for du som svar 1 record (dette indikerer JA). Hvis du derimod tester med 4, 5...., så får du som svar 0 records (dette indikerer NEJ).
Specificér lidt nærmere hvad meningen var, hvis det ikke var dét.
Så laver vi et distinct udtræk af id2, som også findes i vores foregående udtræk af id1, så her genbruger vi: select distinct id1 from test som et subquery, idet vi husker at sætte parentes om:
mysql> select distinct id2 from test where id2 in (select distinct id1 from test); +------+ | id2 | +------+ | 2 | | 1 | | 3 | +------+ 3 rows in set (0.00 sec)
Nu har vi så et query, der fortæller os hvilke ID'er som er brugt både til id1 og id2. Og hvis vi så vil teste om et givent ID er både id1 og id2, så er det jo bare at spørge:
mysql> select id1 as er_dublet from test where id1=2 and id1 in (select distinct id2 from test where id2 in (select distinct id1 from test)); +-----------+ | er_dublet | +-----------+ | 2 | +-----------+ 1 row in set (0.00 sec)
Det giver nogle lange linier, i forhold til denne 1/3 af skærmen som eksperten.dk vil give os - men cut'n'paste det du vil bruge, så undgår du også de tidligere tyrkfejl.
/Jesper
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.