iChristian Skrevet 5. april 2006 Del Skrevet 5. april 2006 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
plumbe Skrevet 5. april 2006 Del Skrevet 5. april 2006 Regner med at userid er lik som id'en i det andre skjemaet. SQL statement: SELECT * FROM medisiner INNER JOIN `tabellen_med_navnene`WHERE tabellen_med_navnene.id = medisiner.userid Lenke til kommentar
???????? Skrevet 5. april 2006 Del Skrevet 5. april 2006 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
???????? Skrevet 5. april 2006 Del Skrevet 5. april 2006 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
iChristian Skrevet 5. april 2006 Forfatter Del Skrevet 5. april 2006 Så hva er forskjellene mellom deres 2 forslag? Lenke til kommentar
???????? Skrevet 5. april 2006 Del Skrevet 5. april 2006 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
CruellaDeVille Skrevet 5. april 2006 Del Skrevet 5. april 2006 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 Skrevet 5. april 2006 Del Skrevet 5. april 2006 (endret) 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 5. april 2006 av Slettet+6132 Lenke til kommentar
iChristian Skrevet 5. april 2006 Forfatter Del Skrevet 5. april 2006 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
Ernie Skrevet 5. april 2006 Del Skrevet 5. april 2006 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
CruellaDeVille Skrevet 5. april 2006 Del Skrevet 5. april 2006 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
Zic0 Skrevet 5. april 2006 Del Skrevet 5. april 2006 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
trondes Skrevet 5. april 2006 Del Skrevet 5. april 2006 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] https://www.diskusjon.no/index.php?showtopi...dpost&p=5733710 Mye kan løses med eksempler full join vil ikke virke i mysql da den ikke støtter det. Lenke til kommentar
iChristian Skrevet 5. april 2006 Forfatter Del Skrevet 5. april 2006 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 Lenke til kommentar
iChristian Skrevet 17. april 2006 Forfatter Del Skrevet 17. april 2006 Bump Bump Bump Jeg må bare bumpe denne litt, jeg vil så gjerne ha et svar skjønner dere. Lenke til kommentar
CruellaDeVille Skrevet 17. april 2006 Del Skrevet 17. april 2006 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
Babelfisken Skrevet 18. april 2006 Del Skrevet 18. april 2006 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
iChristian Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 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
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å