Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

Kombinere 2 MySQL-tabeller


Anbefalte innlegg

Hvordan kan man kombinere 2 tabeller når man skal hente ut informasjon fra MySQL med PHP?

Jeg har en tabell med medisiner som ser slik ut:

 

CREATE TABLE f_medisiner (
 id tinyint(4) NOT NULL auto_increment,
 navn varchar(35) NOT NULL default '',
 firma varchar(50) NOT NULL default '',
 type varchar(100) NOT NULL default '',
 virkestoff varchar(150) NOT NULL default '',
 mg int(11) NOT NULL default '0',
 medlink text NOT NULL,
 firmalink text NOT NULL,
 userid tinyint(1) NOT NULL default '1',
 fast char(3) NOT NULL default 'ja',
 aktiv char(3) NOT NULL default 'ja',
 PRIMARY KEY  (id)

 

userid ligger i en annen tabell hvor de forskjellige brukerne er.

Hvordan kan jeg få det til å faktisk stå christian istedenfor 2?

Lenke til kommentar
Videoannonse
Annonse

FROM f_medisiner.felt, ...., brukere.navn FROM f_medisiner LEFT JOIN brukere ON f_medisiner.userid = brukere.navn;

 

Dersom navnet på den andre tabellen din er brukere, og feltet navn er navn - og du bytter ut .... med de andre feltene du ønsker å hente så brude det fungere.

Lenke til kommentar

Rettelse:

 

FROM f_medisiner.felt, ...., brukere.navn FROM f_medisiner LEFT JOIN brukere ON f_medisiner.userid = brukere.navn;

 

Det skal selvfølgelig stå:

SELECT f_medisiner.felt, ...., brukere.navn FROM f_medisiner LEFT JOIN brukere ON f_medisiner.userid = brukere.navn;

Lenke til kommentar

plumbe bruker INNER JOIN, jeg kan ikke se hvorfor det vil medføre noen fordeler - så mitt valg ville falt på LEFT JOIN. Dette er delvis fordi en vanlig join vil gi deg problemer dersom du sletter fra bruker tabellen din, og fordi MySQL har skrevet en del basert på LEFT JOIN.

Lenke til kommentar
plumbe bruker INNER JOIN, jeg kan ikke se hvorfor det vil medføre noen fordeler - så mitt valg ville falt på LEFT JOIN. Dette er delvis fordi en vanlig join vil gi deg problemer dersom du sletter fra bruker tabellen din, og fordi MySQL har skrevet en del basert på LEFT JOIN.

5873716[/snapback]

 

Men hvorfor bruke left(inner) join i det hele tatt?

Jeg har aldri skjønt poenget med inner, outer, left og right join.

Kan noen forklare?

Lenke til kommentar
Gjest Slettet+6132
Men hvorfor bruke left(inner) join i det hele tatt?

Jeg har aldri skjønt poenget med inner, outer, left og right join.

Kan noen forklare?

5873945[/snapback]

 

Du joiner en tabell med en annen. (Altså putter dem sammen)

 

t1.user | t1.uid | t1.name

 

t2.uid | t2.permissions

 

Hvis du joiner disse på uid vil spørringen returnere user | uid | name | permissions, hvor user fra ene tabellen og persmissions fra den andre har samme uid. Rotete forklaring, men det får holde ;)

Endret av Slettet+6132
Lenke til kommentar

Så hvis koden ser slik ut:

<?php 
$med_liste_hent = mysql_query("SELECT * FROM f_medisiner_liste WHERE `aktiv` ='ja'");
if(!$med_liste_hent) die('DB error: '.mysql_error());
while($rowliste = mysql_fetch_array($med_liste_hent)) {
echo '<tr><td><a target='._blank.' href='.$rowliste['medlink'].'>'.$rowliste['navn'].'</a></td><td>'.$rowliste['mg'].'</td><td>'.$rowliste['fast'].'</td><td>'.$rowliste['userid'].''.'</td></tr>';
}
?>

 

og utfallet blir slik

 

Hvordan skal jeg da endre koden?

Jeg synes dessverre det var litt uklart.

Jeg er ikke så veldig god på PHP/MySQL enda.

Lenke til kommentar
plumbe bruker INNER JOIN, jeg kan ikke se hvorfor det vil medføre noen fordeler - så mitt valg ville falt på LEFT JOIN. Dette er delvis fordi en vanlig join vil gi deg problemer dersom du sletter fra bruker tabellen din, og fordi MySQL har skrevet en del basert på LEFT JOIN.

5873716[/snapback]

 

Men hvorfor bruke left(inner) join i det hele tatt?

Jeg har aldri skjønt poenget med inner, outer, left og right join.

Kan noen forklare?

5873945[/snapback]

Altså, det er forskjellige måter å kjøre join på. Husker ikke hva som er hva er, men det er iallfall slik at man kan droppe rader som ikke har noen tilsvarende rad i den andre tabellen eller fylle ut den manglende delen med NULL.

 

Meget, meget, elendig forklart, men du skjønner kanskje litt mer :) Finnes en del info rundt det på nettet hvis man googler litt.

Lenke til kommentar
Men hvorfor bruke left(inner) join i det hele tatt?

Jeg har aldri skjønt poenget med inner, outer, left og right join.

Kan noen forklare?

5873945[/snapback]

 

Du joiner en tabell med en annen. (Altså putter dem sammen)

 

t1.user | t1.uid | t1.name

 

t2.uid | t2.permissions

 

Hvis du joiner disse på uid vil spørringen returnere user | uid | name | permissions, hvor user fra ene tabellen og persmissions fra den andre har samme uid. Rotete forklaring, men det får holde ;)

5874013[/snapback]

 

Jeg skjønner hva join er for noe, men hvorfor left/right/inner/outer osv?

 

I dette tilfellet ville jeg bare skrevet

select f.whatever, u.name from f_medicine f, user u where f.userID = u.userID

 

Når du bruker en inner join returernerers bare entiteter hvor det er match i begge tabeller.

 

En left join returnerer entiteter fra begge tabeller, selv hvis det ikke er match i tabell 2.

 

En right join returnerer entiteter fra tabell 2 også når det ikke finnes tilsvarende i tabell 1.

 

Så mitt spørsmål blir da. Hvorfor bruke en left join i poststarters spørring.

Lenke til kommentar
plumbe bruker INNER JOIN, jeg kan ikke se hvorfor det vil medføre noen fordeler - så mitt valg ville falt på LEFT JOIN. Dette er delvis fordi en vanlig join vil gi deg problemer dersom du sletter fra bruker tabellen din, og fordi MySQL har skrevet en del basert på LEFT JOIN.

5873716[/snapback]

 

Men hvorfor bruke left(inner) join i det hele tatt?

Jeg har aldri skjønt poenget med inner, outer, left og right join.

Kan noen forklare?

5873945[/snapback]

Altså, det er forskjellige måter å kjøre join på. Husker ikke hva som er hva er, men det er iallfall slik at man kan droppe rader som ikke har noen tilsvarende rad i den andre tabellen eller fylle ut den manglende delen med NULL.

 

Meget, meget, elendig forklart, men du skjønner kanskje litt mer :) Finnes en del info rundt det på nettet hvis man googler litt.

5874271[/snapback]

 

Er ikke 100% sikker, men tror INNER JOIN får frem bare hvor den greier å binde radene mellom to tabeller, mens LEFT JOIN gir også de som ikke kan bindes (d.v.s. alt). Kromsete forklart, men håper dere skjønner.

 

http://www.w3schools.com/sql

 

står noe om det der.

Lenke til kommentar
  • 2 uker senere...
Hvis det kunne hjelpe så ser den andre tabellen slik ut:

CREATE TABLE f_users (
 id tinyint(3) NOT NULL auto_increment,
 user varchar(20) NOT NULL default '',
 PRIMARY KEY  (id)
)

 

Meningen er å bytte ut tallet under bruker med user-navnet.

test

5875211[/snapback]

 

Denne funker hos meg

select m.navn, u.user from f_medisiner m, f_users u where m.userid = u.id;

Lenke til kommentar
Hvis det kunne hjelpe så ser den andre tabellen slik ut:

CREATE TABLE f_users (
 id tinyint(3) NOT NULL auto_increment,
 user varchar(20) NOT NULL default '',
 PRIMARY KEY  (id)
)

 

Meningen er å bytte ut tallet under bruker med user-navnet.

test

5875211[/snapback]

 

Denne funker hos meg

select m.navn, u.user from f_medisiner m, f_users u where m.userid = u.id;

5939234[/snapback]

 

Alternativt

$Query = "SELECT m.navn, u.user FROM f_medisiner m LEFT JOIN f_users u ON m.userid = u.id";

derom det kan forekomme rader i f_medisiner med userid verdier som ikke finnes i user.id. Dette kan skje f.eks dersom man kan slette brukere og eller ved diverse programeringsfeil. Det er opptil deg (og kunden) å vurdrere hva som er viktigst her. User-koblingen eller medisinen.

Lenke til kommentar

Så når man skriver koden slik som dette:

select m.navn, u.user from f_medisiner m, f_users u where m.userid = u.id;

Definerer man tabellen f_medisiner som m?

Har jeg forstått det riktig?

 

I kodesnutten ovenfor er det bare tatt hensyn til at det skal være 2 felt.

Denne koden skal være til for å hente ut alle elementene fra følgende SQL-tabell:

CREATE TABLE `f_medisiner_liste` (
 `id` tinyint(4) NOT NULL auto_increment,
 `navn` varchar(35) NOT NULL default '',
 `firma` varchar(50) NOT NULL default '',
 `type` varchar(100) NOT NULL default '',
 `virkestoff` varchar(150) NOT NULL default '',
 `mg` int(11) NOT NULL default '0',
 `medlink` text NOT NULL,
 `firmalink` text NOT NULL,
 `userid` tinyint(1) NOT NULL default '1',
 `fast` char(3) NOT NULL default 'ja',
 `aktiv` char(3) NOT NULL default 'ja',
 PRIMARY KEY  (`id`)
) TYPE=MyISAM COMMENT='Medisiner vi bruker' AUTO_INCREMENT=13;

(Eventuelt skal ikke bare user, men også firma og firmalink hentes fra eksterne tabeller)

Jeg skjønner virkelig ikke hvordan linjen som skal velge hvilke elementer som skal være skal se ut..

Ble hakket for vanskelig for meg dette.

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