simenss Skrevet 7. november 2003 Del Skrevet 7. november 2003 Jeg har satt opp en mySQL database, men jeg klarer ikke hente ut data fra begge tabellene sammtidig. Det går ikke med "SELECT * FROM tabell1, tabell2 WHERE id = '$id'" Er det noen som har peil på hva jeg kan gjøre, eller hva som er feil? Lenke til kommentar
RottePostei Skrevet 7. november 2003 Del Skrevet 7. november 2003 Skjønner ikke helt hva du skal gjøre? Skal du hente ut rader fra tabell1 og tabell2 som har samme id? I så fall: $sql = "SELECT * FROM tabell1 INNER JOIN tabell2 ON tabell1.id=tabell2.id"; eller $sql = "SELECT * FROM tabell1, tabell2 WHERE tabell1.id=tabell2.id"; Edit: Eller skal du søke etter noe både i tabell1 og tabell2? Lenke til kommentar
simenss Skrevet 7. november 2003 Forfatter Del Skrevet 7. november 2003 Skjønner ikke helt hva du skal gjøre? Skal du hente ut rader fra tabell1 og tabell2 som har samme id? I så fall: $sql = "SELECT * FROM tabell1 INNER JOIN tabell2 ON tabell1.id=tabell2.id"; eller $sql = "SELECT * FROM tabell1, tabell2 WHERE tabell1.id=tabell2.id"; Edit: Eller skal du søke etter noe både i tabell1 og tabell2? Jeg har to tabeller, tabell1 og tabell2. Jeg har en php-fil som skal hente ut en url fra id'en som står bak ?id=id'en. Tabell1 og tabell2 inneholder de to radene url og id. Ingen av id'ene i de to tabellene er like. Skjønner bedre nå? Lenke til kommentar
Torbjørn Skrevet 7. november 2003 Del Skrevet 7. november 2003 Nei, jeg skjøner ikke, hvorfor lagre url og id i hver sin rad i hver sin tabell, hvordan skal mysql vite hvilken url som hører til hvilken id? Lenke til kommentar
RottePostei Skrevet 7. november 2003 Del Skrevet 7. november 2003 Gå inn i mysql og skriv "desc Tabell1" og "desc Tabell2" og skriv utputten her, så skjønner jeg kanskje bedre hvordan det er bygget opp Lenke til kommentar
sofTest Skrevet 7. november 2003 Del Skrevet 7. november 2003 Forstår jeg deg riktig, at du skal finne id som enten befinner seg i tabell1 eller tabell2? Lenke til kommentar
simenss Skrevet 7. november 2003 Forfatter Del Skrevet 7. november 2003 (endret) Forstår jeg deg riktig, at du skal finne id som enten befinner seg i tabell1 eller tabell2? Ja, det er riktig... Endret 21. februar 2006 av simenss Lenke til kommentar
simenss Skrevet 7. november 2003 Forfatter Del Skrevet 7. november 2003 Gå inn i mysql og skriv "desc Tabell1" og "desc Tabell2" og skriv utputten her, så skjønner jeg kanskje bedre hvordan det er bygget opp Tabell1: id int(3) PRI 0 mobil varchar(15) kategori varchar(20) url varchar(100) name varchar(50) size varchar(4) evaluation int(1) 0 description blob artist varchar(100) mmskategori varchar(50) Tabell2: id int(3) 0 mobil varchar(15) kategori varchar(20) url varchar(100) Sånn................ Lenke til kommentar
sofTest Skrevet 7. november 2003 Del Skrevet 7. november 2003 Prøv dette: (select url from tabell1 where id = '$id') union (select url from tabell2 where id = '$id') Edit: Hvis id kan finnes flere ganger i tabellen, så må du bruke union all, ellers virker den som distinct. Lenke til kommentar
simenss Skrevet 7. november 2003 Forfatter Del Skrevet 7. november 2003 Prøv dette: (select url from tabell1 where id = '$id') union (select url from tabell2 where id = '$id') Edit: Hvis id kan finnes flere ganger i tabellen, så må du bruke union all, ellers virker den som distinct. Slik?: $query = mysql_query("SELECT url FROM tabell1 WHERE id = $id") union ("SELECT url FROM tabell2 WHERE id = $id"); // Henter all informasjon fra databasen til $query Lenke til kommentar
sofTest Skrevet 7. november 2003 Del Skrevet 7. november 2003 Kjenner ikke PHP, men vil anta noe mer som: $query = mysql_query("(SELECT url FROM tabell1 WHERE id = $id) union (SELECT url FROM tabell2 WHERE id = $id)"); // Henter all informasjon fra databasen til $query Den henter ikke all informasjon, men url'ene. Union forutsetter at datatypene du henter er identiske. Glemte også å si at union fungerer fra mySQL v. 4.0. Hvis du bruker eldre versjoner, så blir det litt mer knotete å oppnå det samme. Lenke til kommentar
RottePostei Skrevet 7. november 2003 Del Skrevet 7. november 2003 litt keitete men: SELECT DISTINCT $id,IF(Tabell1.id=$id,Tabell1.url,Tabell2.url) as url FROM Tabell1, Tabell2 WHERE Tabell1.id=$id OR Tabell2.id=$id Lenke til kommentar
simenss Skrevet 7. november 2003 Forfatter Del Skrevet 7. november 2003 Kjenner ikke PHP, men vil anta noe mer som:$query = mysql_query("(SELECT url FROM tabell1 WHERE id = $id) union (SELECT url FROM tabell2 WHERE id = $id)"); // Henter all informasjon fra databasen til $query Den henter ikke all informasjon, men url'ene. Union forutsetter at datatypene du henter er identiske. Glemte også å si at union fungerer fra mySQL v. 4.0. Hvis du bruker eldre versjoner, så blir det litt mer knotete å oppnå det samme. Da får jeg opp denne feilmeldingen: Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/httpd/vhosts/httpdocs/test.php on line 16 Lenke til kommentar
RottePostei Skrevet 7. november 2003 Del Skrevet 7. november 2003 Min skal funke i lavere versjoner enn 4 Gi beskjed hvis det ikke funker. Lenke til kommentar
simenss Skrevet 7. november 2003 Forfatter Del Skrevet 7. november 2003 litt keitete men: SELECT DISTINCT $id,IF(Tabell1.id=$id,Tabell1.url,Tabell2.url) as url FROM Tabell1, Tabell2 WHERE Tabell1.id=$id OR Tabell2.id=$id TUSEN TAKK Men hvis du kunne hjelpe meg med en ting til... Hva blir det hvis jeg skal ha Tabell1, Tabell2, Tabell3 og Tabell4? TUSEN TAKK NOK EN GANG Lenke til kommentar
RottePostei Skrevet 7. november 2003 Del Skrevet 7. november 2003 SELECT DISTINCT $id AS id, IF(Tabell1.id=$id,Tabell1.url,IF(Tabell2.id=$id,Tabell2.url,IF(Tabell3.id=$id,Tabell3.url,Tabell4.url))) as url FROM Tabell1, Tabell2, Tabell3, Tabell4 WHERE Tabell1.id=$id OR Tabell2.id=$id OR Tabell3.id=$id OR Tabell4.id=$id Edit: Glemte "Tabell3,Tabell4" i FROM Edit2: Tok med aliaset "AS id" i SELECT'en dersom det er ønskelig at feltet skal ha et navn, men du vet jo id'en før du spør så det er jo ikke nødvendig. Edit3: Alternativt: $myrow = ""; $antall_tabeller = 4; for ($j = 1; $j <= $antall_tabeller; $j++) { $sql = "SELECT * FROM Tabell".$j" WHERE id=".$id; $result = mysql_query($sql); if ($myrow = mysql_fetch_array($result)) { break; } } if (!$myrow) { echo "Fant ingen resultater med id=".$id; } else { echo "Fant url ".$myrow["url"]; } edit4: phpkoden over vil bare skrive ut et resultat. Hvis det er flere må det gjøres noe istedenfor break i for-løkka. Lenke til kommentar
RottePostei Skrevet 7. november 2003 Del Skrevet 7. november 2003 Kan noen moderatorer flytte denne tråden over i programmering->php og slette dette innlegget forresten? Lenke til kommentar
simenss Skrevet 7. november 2003 Forfatter Del Skrevet 7. november 2003 SELECT DISTINCT $id AS id, IF(Tabell1.id=$id,Tabell1.url,IF(Tabell2.id=$id,Tabell2.url,IF(Tabell3.id=$id,Tabell3.url,Tabell4.url))) as url FROM Tabell1, Tabell2, Tabell3, Tabell4 WHERE Tabell1.id=$id OR Tabell2.id=$id OR Tabell3.id=$id OR Tabell4.id=$id Edit: Glemte "Tabell3,Tabell4" i FROM Edit2: Tok med aliaset "AS id" i SELECT'en dersom det er ønskelig at feltet skal ha et navn, men du vet jo id'en før du spør så det er jo ikke nødvendig. Edit3: Alternativt: $myrow = ""; $antall_tabeller = 4; for ($j = 1; $j <= $antall_tabeller; $j++) { $sql = "SELECT * FROM Tabell".$j" WHERE id=".$id; $result = mysql_query($sql); if ($myrow = mysql_fetch_array($result)) { break; } } if (!$myrow) { echo "Fant ingen resultater med id=".$id; } else { echo "Fant url ".$myrow["url"]; } edit4: phpkoden over vil bare skrive ut et resultat. Hvis det er flere må det gjøres noe istedenfor break i for-løkka. Dette har jeg brukt over 10 timer på å klare, så TUSEN TAKK Lenke til kommentar
simenss Skrevet 8. november 2003 Forfatter Del Skrevet 8. november 2003 SELECT DISTINCT $id AS id, IF(Tabell1.id=$id,Tabell1.url,IF(Tabell2.id=$id,Tabell2.url,IF(Tabell3.id=$id,Tabell3.url,Tabell4.url))) as url FROM Tabell1, Tabell2, Tabell3, Tabell4 WHERE Tabell1.id=$id OR Tabell2.id=$id OR Tabell3.id=$id OR Tabell4.id=$id Denne spørringen fungerer, men bruker fryktelig lang tid før den klarer å hente url'en... Noen tips? Lenke til kommentar
sofTest Skrevet 8. november 2003 Del Skrevet 8. november 2003 Den alternative måten jeg tenkte på i går, var å lage en temporær tabell som du kopierer alle relevante data til, for så å gjøre select'en: CREATE TEMPORARY TABLE temp_url TYPE=HEAP (id int(3), url varchar(100)); INSERT INTO temp_url (id, url) SELECT id, url FROM table1; INSERT INTO temp_url (id, url) SELECT id, url FROM table2; INSERT INTO temp_url (id, url) SELECT id, url FROM table3; INSERT INTO temp_url (id, url) SELECT id, url FROM table4; SELECT * FROM temp_url WHERE id = '$id'; DROP TABLE temp_url; Siden HEAP arbeider i memory, så burde den gå relativt raskt. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå