Gå til innhold

[LØST]Spørring etter to navn i "støttetabell".


Anbefalte innlegg

Skrevet (endret)

Får ikke noe resultat når jeg prøver å hente ut informasjon om en busstur.

Det fungerer fint så lenge jeg har enten fra eller til holdeplass, men da jeg ønsker å vise

begge to støter jeg på problemer...

Feilen er vel at både "tur.fra" og "tur.til" er satt til å være lik "holdeplass.navn".

Noen som kunne hjelpe meg litt med denne?

 

 

Jeg har to tabeller:

 

1. tur

id | fra | til

 

Eks:

1 | 3 | 10

2 | 6 | 12

3 | 2 | 9

 

2. holdeplass

id | navn

 

Eks:

1 | Holdeplass 1

2 | Holdeplass 2

3 | Holdeplass 3

4 | Holdeplass 4 osv

 

$sql = "SELECT * FROM tur, holdeplass
	WHERE tur.fra = holdeplass.id
	AND tur.til = holdeplass.id // Denne 
	ORDER BY holdeplass.fra, tur.id
	";


$result = mysql_query($sql, $link);
if (!$result) {
  die('Det oppstod en feil: ' . mysql_error());
} else {
 while ($row = mysql_fetch_assoc($result)) {

echo "ID " . $row['id'];
echo "Fra " . $row['navn'];
echo "Til " . $row['navn']; // Dette blir jo feil ?

}
}

Endret av Teobald
Videoannonse
Annonse
Skrevet (endret)

Det spørringen din sier er:

 

Vis meg alle turer hvor både tur.fra og tur.til er lik holdeplass.id.

 

Når dette uttrykket evalueres brukes kun en verdi for holdeplass.id av gangen. Det du spør etter er altså: Vis meg alle turer som går fra et sted til samme stedet.

(Prøv å legg inn en tur fra holdeplass 1 til holdeplass 1 så vil du se den kommer opp)

 

Hvis du skriver litt tydeligere hva du ønsker å få tilbake fra spørringen din kan jeg kanskje hjelpe deg om du ikek finner ut av det selv.

 

BTW:

 

ORDER BY holdeplass.fra, tur.id

 

Er denne linjen riktig eller har du byttet om holdeplass og tur her?

Endret av Ekko
Skrevet (endret)

Jeg tror jeg ser hva du er ute etter. Prøv denne:

 

mysql> select * from tur;

+------+------+------+

| id | fra | til |

+------+------+------+

| 1 | 1 | 2 |

| 2 | 1 | 3 |

| 3 | 1 | 4 |

| 4 | 2 | 1 |

| 5 | 2 | 3 |

| 6 | 2 | 4 |

| 7 | 3 | 1 |

| 8 | 3 | 2 |

| 9 | 3 | 4 |

| 10 | 4 | 1 |

| 11 | 4 | 2 |

| 12 | 4 | 3 |

| 12 | 4 | 4 |

+------+------+------+

13 rows in set (0.00 sec)

 

mysql> select * from holdeplass;

+------+-----------+

| id | navn |

+------+-----------+

| 1 | Bergen |

| 2 | Oslo |

| 3 | Trondheim |

| 4 | Stavanger |

+------+-----------+

4 rows in set (0.00 sec)

 

mysql> SELECT * FROM tur LEFT JOIN holdeplass AS h1 ON tur.fra=h1.id LEFT JOIN holdeplass AS h2 ON tur.til=h2.id ;

+------+------+------+------+-----------+------+-----------+

| id | fra | til | id | navn | id | navn |

+------+------+------+------+-----------+------+-----------+

| 1 | 1 | 2 | 1 | Bergen | 2 | Oslo |

| 2 | 1 | 3 | 1 | Bergen | 3 | Trondheim |

| 3 | 1 | 4 | 1 | Bergen | 4 | Stavanger |

| 4 | 2 | 1 | 2 | Oslo | 1 | Bergen |

| 5 | 2 | 3 | 2 | Oslo | 3 | Trondheim |

| 6 | 2 | 4 | 2 | Oslo | 4 | Stavanger |

| 7 | 3 | 1 | 3 | Trondheim | 1 | Bergen |

| 8 | 3 | 2 | 3 | Trondheim | 2 | Oslo |

| 9 | 3 | 4 | 3 | Trondheim | 4 | Stavanger |

| 10 | 4 | 1 | 4 | Stavanger | 1 | Bergen |

| 11 | 4 | 2 | 4 | Stavanger | 2 | Oslo |

| 12 | 4 | 3 | 4 | Stavanger | 3 | Trondheim |

| 12 | 4 | 4 | 4 | Stavanger | 4 | Stavanger |

+------+------+------+------+-----------+------+-----------+

13 rows in set (0.00 sec)

Endret av Ekko
Skrevet
Det spørringen din sier er:

 

Vis meg alle turer hvor både tur.fra og tur.til er lik holdeplass.id.

 

Når dette uttrykket evalueres brukes kun en verdi for holdeplass.id av gangen. Det du spør etter er altså: Vis meg alle turer som går fra et sted til samme stedet.

(Prøv å legg inn en tur fra holdeplass 1 til holdeplass 1 så vil du se den kommer opp)

 

Hvis du skriver litt tydeligere hva du ønsker å få tilbake fra spørringen din kan jeg kanskje hjelpe deg om du ikek finner ut av det selv.

 

BTW:

 

ORDER BY holdeplass.fra, tur.id

 

Er denne linjen riktig eller har du byttet om holdeplass og tur her?

 

 

Der var det nok byttet om, ja...

Riktig skal være holdeplass.id, tur.id

 

Du har helt rett i at spørringen min er feil.

Det jeg ønsker er å hente navnet på de to holdeplassene fra 'holdeplass'.

(istedefor id til holdeplass som er lagret i tabellen 'tur').

 

Eks:

ID | fra | til

1 | 3 | 10

 

Ønsker jeg skal hente respektive navn fra tabell 'holdeplass'

og printes slik:

 

ID 1

Fra: Arendal

Til: Oslo

Skrevet

Da er det altså denne du er ute etter:

 

mysql> SELECT tur.id,h1.navn,h2.navn FROM tur LEFT JOIN holdeplass AS h1 ON tur.fra=h1.id LEFT JOIN holdeplass AS h2 ON tur.til=h2.id ;

+------+-----------+-----------+

| id | navn | navn |

+------+-----------+-----------+

| 1 | Bergen | Oslo |

| 2 | Bergen | Trondheim |

| 3 | Bergen | Stavanger |

| 4 | Oslo | Bergen |

| 5 | Oslo | Trondheim |

| 6 | Oslo | Stavanger |

| 7 | Trondheim | Bergen |

| 8 | Trondheim | Oslo |

| 9 | Trondheim | Stavanger |

| 10 | Stavanger | Bergen |

| 11 | Stavanger | Oslo |

| 12 | Stavanger | Trondheim |

| 12 | Stavanger | Stavanger |

+------+-----------+-----------+

13 rows in set (0.01 sec)

Skrevet
Da er det altså denne du er ute etter:

 

mysql> SELECT tur.id,h1.navn,h2.navn FROM tur LEFT JOIN holdeplass AS h1 ON tur.fra=h1.id LEFT JOIN holdeplass AS h2 ON tur.til=h2.id ;

+------+-----------+-----------+

| id | navn | navn |

+------+-----------+-----------+

| 1 | Bergen | Oslo |

| 2 | Bergen | Trondheim |

| 3 | Bergen | Stavanger |

| 4 | Oslo | Bergen |

| 5 | Oslo | Trondheim |

| 6 | Oslo | Stavanger |

| 7 | Trondheim | Bergen |

| 8 | Trondheim | Oslo |

| 9 | Trondheim | Stavanger |

| 10 | Stavanger | Bergen |

| 11 | Stavanger | Oslo |

| 12 | Stavanger | Trondheim |

| 12 | Stavanger | Stavanger |

+------+-----------+-----------+

13 rows in set (0.01 sec)

 

 

Dette ser veldig riktig ut :-)

Hvordan får jeg nå printet ut de to holdeplassene?

Blir det slik:

echo $row['h1.navn'];

echo $row['h2.navn'];

Skrevet (endret)

Slik ser det ut hos meg nå:

 

<?php

$link = mysql_connect('localhost', '*****', '******');
if (!$link) {
  die('Kunne ikke koble til: ' . mysql_error());
}
mysql_select_db('******')
 or die('Kunne ikke velge databasen');


$sql = "SELECT tur.id, h1.navn, h2.navn
	FROM tur

	LEFT JOIN holdeplass AS h1
	ON tur.fra = h1.id

	LEFT JOIN holdeplass AS h2
	ON holdeplass.til = h2.id
	";

$result = mysql_query($sql, $link);
if (!$result) {
  die('Det oppstod en feil: ' . mysql_error());
} else {
 while ($row = mysql_fetch_assoc($result)) {

echo "FRA: " . $row['h1.navn'] . "<br />";
echo "TIL: " . $row['h2.navn'] . "<br />";
echo "<hr />";

}
}
?>

Endret av Teobald
Skrevet (endret)

Prøv denne, da skal det vel gå greit

 

 

mysql> SELECT tur.id,h1.navn AS Fra ,h2.navn AS Til FROM tur LEFT JOIN holdeplass AS h1 ON tur.fra=h1.id LEFT JOIN holdeplass AS h2 ON tur.til=h2.id ;

+------+-----------+-----------+

| id | Fra | Til |

+------+-----------+-----------+

| 1 | Bergen | Oslo |

| 2 | Bergen | Trondheim |

| 3 | Bergen | Stavanger |

| 4 | Oslo | Bergen |

| 5 | Oslo | Trondheim |

| 6 | Oslo | Stavanger |

| 7 | Trondheim | Bergen |

| 8 | Trondheim | Oslo |

| 9 | Trondheim | Stavanger |

| 10 | Stavanger | Bergen |

| 11 | Stavanger | Oslo |

| 12 | Stavanger | Trondheim |

| 12 | Stavanger | Stavanger |

+------+-----------+-----------+

13 rows in set (0.00 sec)

 

mysql>

 

 

 

 

 

Da kan du bruke ['Fra'] og ['Til']

 

Evt kan du vel gjøre en print_r($row) for å se hva kolonnene heter i arrayen din. Mulig du da ser at du kan bruke $row[1] og $row[2], husker ikke helt.

Endret av Ekko

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