AnaXyd Skrevet 21. juni 2012 Del Skrevet 21. juni 2012 Heisann! Er nybegynner i PHP, men driver med en applikasjon i Codeigniter som jeg sysler litt med. Denne er laget av noen andre, men jeg hjelper til litt i ny og ne. Begynner å få grei oversikt, men ha nå kommet frem til en utfordring jeg ikke klarer å løse. Jeg har en database, med tre tabeller. Den ene tabellen(users), lagrer brukerinformasjon, som ID, navn, mail, passord osv. Den andre tabellen(fag), lagrer informasjon om faget, som ID, tittel, beskrivelse, bruker_ID osv. Den tredje tabellen(kapitler), lagrer informasjon om selve kapitlene, som ID, kapittel navn, beskrivelse, fag_ID og bruker_ID ID-verdiene i alle tabellene er det vanlige, med auto increment. bruker_ID henger sammen med IDen til brukerne. Altså IDen i tabellen users. Eksempel: Lager en bruker som har en ID på 31 et fag, med et kapittel i, vil bruker_ID i fag og kapitler være 31. fag_ID henger sammen med IDen til fagene. Altså IDen i tabellen fag. Det som er utfordringen, er at jeg ikke vet åssen jeg skal klare å hente ut alle disse tre tabellene i en foreach loop, hvor alt henger sammen. Jeg kan vise min foreach loop slik den er per idag: <?php foreach ($fag as $item): ?> <div class="well"> <h1><?php echo $item['title'] ?></h1> <p><?php echo $item['description'] ?></p> </div> <?php endforeach; ?> Denne henter da altså ut tittel og beskrivelse av et fag. Jeg kunne gjerne tenkt meg å hente ut navnet på brukeren som har laget faget, samt hvor mange kapitler det er i de enkelte fagene, i tillegg til det jeg gjør idag. Er det noen som veit åssen jeg kan gjøre dette? Lenke til kommentar
Thomas. Skrevet 21. juni 2012 Del Skrevet 21. juni 2012 Du burde se litt på forskjellige joins! Da kan du hente og matche data fra andre tabeller basert på innholdet i forskjellige rader. Her har jeg laget et eksempel, hvor jeg henter info når fagid'en = 1: SELECT t1.tittel AS FagTittel, t2.id AS BrukerSomLagetFaget, COUNT(t3.id) AS AntallKapitler FROM fag AS t1 LEFT JOIN users AS t2 ON t1.bruker_ID = t2.id LEFT JOIN kapitler AS t3 ON t1.id = t3.fag_ID WHERE t1.id = 1 Med denne spørringen kan du hente ut tittelen på faget med $item['FagTittel'], Brukeren som har laget kapitelet sin ID med $item['BrukerSomLagetFaget'] og $item['AntallKapitler'] for hvor mange kapitler det finnes i det faget. Database: -- -------------------------------------------------------- -- Host: 127.0.0.1 -- Server version: 5.1.53-community-log - MySQL Community Server (GPL) -- Server OS: Win64 -- HeidiSQL version: 7.0.0.4140 -- Date/time: 2012-06-21 15:50:25 -- -------------------------------------------------------- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET NAMES utf8 */; /*!40014 SET FOREIGN_KEY_CHECKS=0 */; -- Dumping database structure for hei CREATE DATABASE IF NOT EXISTS `hei` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `hei`; -- Dumping structure for table hei.fag CREATE TABLE IF NOT EXISTS `fag` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `tittel` int(10) unsigned DEFAULT NULL, `bruker_ID` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; -- Dumping data for table hei.fag: 0 rows /*!40000 ALTER TABLE `fag` DISABLE KEYS */; INSERT IGNORE INTO `fag` (`id`, `tittel`, `bruker_ID`) VALUES (1, 666, 1), (2, 777, 2), (3, 888, 2), (4, 999, 2); /*!40000 ALTER TABLE `fag` ENABLE KEYS */; -- Dumping structure for table hei.kapitler CREATE TABLE IF NOT EXISTS `kapitler` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `navn` int(10) unsigned DEFAULT NULL, `fag_ID` int(10) unsigned DEFAULT NULL, `bruker_ID` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; -- Dumping data for table hei.kapitler: 0 rows /*!40000 ALTER TABLE `kapitler` DISABLE KEYS */; INSERT IGNORE INTO `kapitler` (`id`, `navn`, `fag_ID`, `bruker_ID`) VALUES (1, 111, 1, 1), (2, 222, 1, 1), (3, 333, 2, 2); /*!40000 ALTER TABLE `kapitler` ENABLE KEYS */; -- Dumping structure for table hei.users CREATE TABLE IF NOT EXISTS `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `navn` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; -- Dumping data for table hei.users: 0 rows /*!40000 ALTER TABLE `users` DISABLE KEYS */; INSERT IGNORE INTO `users` (`id`, `navn`) VALUES (1, 123), (2, 321); /*!40000 ALTER TABLE `users` ENABLE KEYS */; /*!40014 SET FOREIGN_KEY_CHECKS=1 */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; Lenke til kommentar
etse Skrevet 21. juni 2012 Del Skrevet 21. juni 2012 Det er viktig å presssisere at å lære seg programmering og databaser samtidig er litt overkill - prøv å lær en av gangen. Databaser er såpass stort tema at man kan fint se på det som et eget fag - og om du prøver å lære deg databaser samtidig som du lærer deg programmering så ender du ofte opp med å ikke lære deg å forstå databasene ordentlig. I webprogrammer, men også annet, er databaser noe av det som oftest skaper overhead og treghet i systemene; og god forståelse for oppbygning av database-tabeller og hvordan skrive gode og effektive spørringer er derfor viktig. Så vil anbefale deg å utsette det å lære deg databaser litt - slik at du ikke lærer deg masse dårlige uvaner og snarveier fordi man ikke forstår ordentlig hvordan systemet fungerer. Lenke til kommentar
AnaXyd Skrevet 21. juni 2012 Forfatter Del Skrevet 21. juni 2012 Se her ja! Takk for svar! Dette skal jeg se litt nærmere på. Er ikke noen racer i database og PHP, driver bare littegranne i Codeigniter da jeg syntes dette var et oversiktelig rammeverk. Driver egentlig mest som front-end designer, og skal nok holde meg til det også. Kan jo ikke lære alt her i verden! 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å