Gå til innhold

PHP & mySQL: Spørring til to tabeller


Anbefalte innlegg

Videoannonse
Annonse

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
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
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
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

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
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
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 :D

 

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 :D

Lenke til kommentar

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
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 :D

Lenke til kommentar
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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...