Gå til innhold

PHP & mySQL: Spørring til to tabeller


Anbefalte innlegg

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.

Er dette en spørring som skal puttes sammen inn i:

 

$query = mysql_query("SPØRRING?");

 

Er ikke helt ferdigutlært :)

Lenke til kommentar
Videoannonse
Annonse

Det fungerte fint med spørringen:

 

 SELECT DISTINCT $id AS id, IF(Tabell1.id=$id,Tabell1.url,IF(Tabell2.id=$id,Tabell2.url,Tabell3.url)) as url FROM Tabell1, Tabell2, Tabell3 WHERE Tabell1.id=$id OR Tabell2.id=$id OR Tabell3.id=$id

 

 

Men når jeg prøver å øke antall tabeller til 4 går det sinnsykt tregt!

Lenke til kommentar
Er dette en spørring som skal puttes sammen inn i:

 

$query = mysql_query("SPØRRING?");

 

Er ikke helt ferdigutlært :)

Nei, dette må kjøres som 7 separate "spørringer" mot mySQL. Det går nok å trekke dette sammen litt, men gjør det enkelt her siden jeg ikke har mulighet til å teste selv.

 

Hvilken versjon av mySQL kjører du? Kjør "SELECT VERSION();" hvis du er usikker.

Lenke til kommentar
Nei, dette må kjøres som 7 separate "spørringer" mot mySQL.  Det går nok å trekke dette sammen litt, men gjør det enkelt her siden jeg ikke har mulighet til å teste selv.

 

Hvilken versjon av mySQL kjører du?  Kjør "SELECT VERSION();" hvis du er usikker.

Versjon 3.23.58

Lenke til kommentar
Nei, dette må kjøres som 7 separate "spørringer" mot mySQL.  Det går nok å trekke dette sammen litt, men gjør det enkelt her siden jeg ikke har mulighet til å teste selv.

 

Hvilken versjon av mySQL kjører du?  Kjør "SELECT VERSION();" hvis du er usikker.

Versjon 3.23.58

Det der er en gammel versjon. Prøv og se om du kan få oppgradert.

Lenke til kommentar
Versjon 3.23.58

OK, det er derfor union fra i går ikke fungerer. Hadde vært den mest elegante løsningen. Som sagt, så kjenner jeg ikke PHP, men har sjekket litt i dokumentasjonen. Hvis jeg forstår den riktig, så blir de 7 linjene slik i PHP:

mysql_query("CREATE TEMPORARY TABLE temp_url TYPE=HEAP (id int(3), url varchar(100))");
mysql_query("INSERT INTO temp_url (id, url) SELECT id, url FROM table1");
mysql_query("INSERT INTO temp_url (id, url) SELECT id, url FROM table2");
mysql_query("INSERT INTO temp_url (id, url) SELECT id, url FROM table3");
mysql_query("INSERT INTO temp_url (id, url) SELECT id, url FROM table4");
$query = mysql_query("SELECT * FROM temp_url WHERE id = '$id'");
mysql_query("DROP TABLE temp_url");

Lenke til kommentar
Det fungerte fint med spørringen:

 

 SELECT DISTINCT $id AS id, IF(Tabell1.id=$id,Tabell1.url,IF(Tabell2.id=$id,Tabell2.url,Tabell3.url)) as url FROM Tabell1, Tabell2, Tabell3 WHERE Tabell1.id=$id OR Tabell2.id=$id OR Tabell3.id=$id

 

 

Men når jeg prøver å øke antall tabeller til 4 går det sinnsykt tregt!

Den lager et kartesisk produkt av alle tabellene så det er ikke så rart det går tregt. Jeg ville nok heller brukt 4 queries slik som jeg viste med PHP-koden.

Lenke til kommentar
hvorfor har du data i så mange forskjellige tabeller?

 

går det an å løse dette på helt andre måter?

Jeg har det i fire tabeller, fordi hver tabell inneholder url til fire forskjellige typer filer. Det er også stor forskjell på radene i de fire tabellene.

Lenke til kommentar
Nei, dette må kjøres som 7 separate "spørringer" mot mySQL.  Det går nok å trekke dette sammen litt, men gjør det enkelt her siden jeg ikke har mulighet til å teste selv.

 

Hvilken versjon av mySQL kjører du?  Kjør "SELECT VERSION();" hvis du er usikker.

Versjon 3.23.58

Det der er en gammel versjon. Prøv og se om du kan få oppgradert.

Jeg har sendte en mail til hosten av mitt webhotell og spurt om oppgradering :)

Lenke til kommentar
$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"];
}

Når jeg bruker denne PHP-koden kommer denne feilmeldingen opp:

 

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /home/httpd/vhosts/httpdocs/test.php on line 20

 

Må jeg endre på noe i koden?

Lenke til kommentar
Gjest Slettet-rXRozPkg

Jeg regner med at dette er linje 20:

$sql = "SELECT * FROM Tabell".$j" WHERE id=".$id;

 

Bytt til:

$sql = "SELECT * FROM Tabell".$j." WHERE id='$id'";

Eller:

$sql = "SELECT * FROM Tabell$j WHERE id='$id'";

Lenke til kommentar
Gjest Slettet-rXRozPkg

Ligger det noe i tabellen på id 9 da?

Skriv også ut SQL strengen og eventuelle feilmeldinger, så blir det lettere å debugge.

 

Kan f.eks gjøres slik:

echo $sql."<br>";

$result = mysql_query($sql) or die ("Spørringsfeil: ".mysql_error());

Lenke til kommentar
Ligger det noe i tabellen på id 9 da?

Skriv også ut SQL strengen og eventuelle feilmeldinger, så blir det lettere å debugge.

 

Kan f.eks gjøres slik:

echo $sql."<br>";

$result = mysql_query($sql) or die ("Spørringsfeil: ".mysql_error());

Gjore som du sa og dette kom opp:

 

SELECT * FROM Tabell4 WHERE id='.1'

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...