peace2 Skrevet 18. mai 2010 Del Skrevet 18. mai 2010 (endret) Følgende kode vil liste opp 2 koloner men jeg vil ha 3 ! SELECT e.ord , s.ord FROM ordliste AS s INNER JOIN ordliste AS e ON e.ord_nummer = s.ord_number AND e.språk = "Norsk" AND s.språk = "Engelsk" AND e.kapitel="1" AND s.kapitel="1" noen som har greie på det? edit: Lagt til eksempel bilde. Endret 11. juni 2010 av peace2 Lenke til kommentar
Ekko Skrevet 18. mai 2010 Del Skrevet 18. mai 2010 Litt usikker på hva du prøver å gjøre, men det jeg synes det høres ut som er at du vil egentlig kjøre vanlige spørringer, men vil ha resultatene presentert i kolonner istedenfor rader. Du ønsker feks å gjøre en spørring på ordet "Hei", får det ut på 3 språk hvor første rad inneholder navnet på språkene og neste rad inneholder oversettelsene? Det kalles vel å transponere resultatet tror jeg. Måten å gjøre det på tror jeg er vel i ettertid i skriptspråket ditt vil jeg tro, feks at du slenger aller reaultatene inn i en array og bruker den til å lage sluttabellen din. Lenke til kommentar
peace2 Skrevet 18. mai 2010 Forfatter Del Skrevet 18. mai 2010 Litt usikker på hva du prøver å gjøre, men det jeg synes det høres ut som er at du vil egentlig kjøre vanlige spørringer, men vil ha resultatene presentert i kolonner istedenfor rader. Du ønsker feks å gjøre en spørring på ordet "Hei", får det ut på 3 språk hvor første rad inneholder navnet på språkene og neste rad inneholder oversettelsene? Det kalles vel å transponere resultatet tror jeg. Måten å gjøre det på tror jeg er vel i ettertid i skriptspråket ditt vil jeg tro, feks at du slenger aller reaultatene inn i en array og bruker den til å lage sluttabellen din. Hei igjen! takk for sjapp respons. Nei spørring på et ord er enkelt =) bare å spørre 3 ganger så får man til.. bruker html+php og mysql Jeg vil altså liste opp alle ordene ( la oss si 30 ord totalt så ikke vi trenger å ta med neste og forige knappene) Har lagt til et eksempel bilde opp for å gjøre det lettere å se Lenke til kommentar
Ekko Skrevet 19. mai 2010 Del Skrevet 19. mai 2010 (endret) Det jeg tenker da er at du gjør noe slikt som SELECT ord_nummer, ord, språk FROM tabell ORDER BY ord_nummer, språk; Så får du dette resultatet ut og bruker en while til å løpe igjennom det og skrive det til tabellen. Hver gang du får at forrige ord_nummer er ulikt det neste lager du en ny rad. Endret 19. mai 2010 av Ekko Lenke til kommentar
peace2 Skrevet 19. mai 2010 Forfatter Del Skrevet 19. mai 2010 (endret) Det jeg tenker da er at du gjør noe slikt som SELECT ord_nummer, ord, språk FROM tabell ORDER BY ord_nummer, språk; Så får du dette resultatet ut og bruker en while til å løpe igjennom det og skrive det til tabellen. Hver gang du får at forrige ord_nummer er ulikt det neste lager du en ny rad. Problemet med det er at det ikke går ann å ha i tabell. La oss ta et eksempel: <?php $opplistingsvariabel= "<table><tbody><tr><td>Norsk</td> <td>Engelsk</td> <td>fransk</td></tr>"; //her startes tabellen $result = mysql_query("SELECT ord_nummer, ord, språk FROM tabell ORDER BY ord_nummer, språk;"); while($row = mysql_fetch_array($result)) { $ord = $row['ord']; $opplistingsvariabel.="<tr> <td>norskvariabel</td><td>engelskvariabel</td><td>spanskvariabel</td> </tr>"; //her loopes tabellen gjennom ordene som fins i db. problemet er her! ordene vil da vises på et språk! da er det umulig å få laget variabler av det... } ?> $opplistingsvariabel.="</tbody></table>"; //tabellen avsluttes her print $opplistingsvariabel; // tabllen skrives her man får ikke 3 språk ut av det. derfor har jeg lagt til en spørringskode i første post som da klarer å liste opp 2 koloner. eneste problemet som gjenstår da er muligheten til å utvide den spørringen til å liste opp alle 3 kolonene! Endret 19. mai 2010 av peace2 Lenke til kommentar
Ekko Skrevet 20. mai 2010 Del Skrevet 20. mai 2010 Dette blirl itt kvasikode, ikke ta all syntaksen for god fisk. Legg merke til at denne løsninegn forutsetter at alle språkene har ordet for at det skal bli pent og riktig. Du vil og få de norske ordene uder franske, franske under engelske og engelske under franske slik det er nå, men det kan du nok finne på en løsnig for. <?php $opplistingsvariabel= "<table><tbody><tr><td>Norsk</td> <td>Engelsk</td> <td>fransk</td></tr>"; //her startes tabellen $result = mysql_query("SELECT ord_nummer, ord, språk FROM tabell ORDER BY ord_nummer, språk;"); while($row = mysql_fetch_array($result)){ $ord = $row['ord']; $ordnummer = $row['ordnummer']; if(ordnummer==$forrigeordnummer){ $opplistingsvariabel.="<td>$ord</td>"; }else{ $opplistingsvariabel.="</tr><tr><td>$ord</td>"; $forrigeordnummer=$ordnummer; } } ?> $opplistingsvariabel.="</tr></tbody></table>"; //tabellen avsluttes her print $opplistingsvariabel; // tabllen skrives her Fikk ikke tid til å lese igjennom alt her, emn du skjønenr kanskje poenget. Lenke til kommentar
Ekko Skrevet 20. mai 2010 Del Skrevet 20. mai 2010 Dette blirl itt kvasikode, ikke ta all syntaksen for god fisk. Legg merke til at denne løsninegn forutsetter at alle språkene har ordet for at det skal bli pent og riktig. Du vil og få de norske ordene uder franske, franske under engelske og engelske under franske slik det er nå, men det kan du nok finne på en løsnig for. <?php $opplistingsvariabel= "<table><tbody><tr><td>Norsk</td> <td>Engelsk</td> <td>fransk</td></tr>"; //her startes tabellen $result = mysql_query("SELECT ord_nummer, ord, språk FROM tabell ORDER BY ord_nummer, språk;"); while($row = mysql_fetch_array($result)){ $ord = $row['ord']; $ordnummer = $row['ordnummer']; if(ordnummer==$forrigeordnummer){ $opplistingsvariabel.="<td>$ord</td>"; }else{ $opplistingsvariabel.="</tr><tr><td>$ord</td>"; $forrigeordnummer=$ordnummer; } } ?> $opplistingsvariabel.="</tr></tbody></table>"; //tabellen avsluttes her print $opplistingsvariabel; // tabllen skrives her Fikk ikke tid til å lese igjennom alt her, emn du skjønenr kanskje poenget. 1 Lenke til kommentar
peace2 Skrevet 22. mai 2010 Forfatter Del Skrevet 22. mai 2010 Dette blirl itt kvasikode, ikke ta all syntaksen for god fisk. Legg merke til at denne løsninegn forutsetter at alle språkene har ordet for at det skal bli pent og riktig. Du vil og få de norske ordene uder franske, franske under engelske og engelske under franske slik det er nå, men det kan du nok finne på en løsnig for. <?php $opplistingsvariabel= "<table><tbody><tr><td>Norsk</td> <td>Engelsk</td> <td>fransk</td></tr>"; //her startes tabellen $result = mysql_query("SELECT ord_nummer, ord, språk FROM tabell ORDER BY ord_nummer, språk;"); while($row = mysql_fetch_array($result)){ $ord = $row['ord']; $ordnummer = $row['ordnummer']; if(ordnummer==$forrigeordnummer){ $opplistingsvariabel.="<td>$ord</td>"; }else{ $opplistingsvariabel.="</tr><tr><td>$ord</td>"; $forrigeordnummer=$ordnummer; } } ?> $opplistingsvariabel.="</tr></tbody></table>"; //tabellen avsluttes her print $opplistingsvariabel; // tabllen skrives her Fikk ikke tid til å lese igjennom alt her, emn du skjønenr kanskje poenget. Det løste ikke problemt enda... La oss heller fikse på dette (to koloners listing), utvide det slik at det blir mulig å få med 3 koloner: SELECT e.ord , s.ord FROM ordliste AS s INNER JOIN ordliste AS e ON e.ord_nummer = s.ord_number AND e.språk = "Norsk" AND s.språk = "Engelsk" AND e.kapitel="1" AND s.kapitel="1" Lenke til kommentar
Crowly Skrevet 31. mai 2010 Del Skrevet 31. mai 2010 (endret) SELECT e.ord, s.ord, n.ord FROM test AS s INNER JOIN test AS e ON e.ordnr = s.ordnr INNER JOIN test AS n ON e.ordnr = n.ordnr AND e.language = 'Norsk' AND s.language = 'Engelsk' AND n.language = 'Spansk' AND e.kapitel =1 AND s.kapitel =1 AND n.kapitel =1 Alternativt er som Ekko er inn på å løse dette i php echo '<table>'; echo '<tr><th>Språk1</th><th>Språk2</th><th>Språk3</th></tr>'; $result = mysql_query("SELECT ord_nummer, ord, språk FROM ordliste ORDER BY ordnr, språk"); $ordnr=-1; while ($row=mysql_fetch_assoc($result)) { if ($row['ord_nummer']!=$ordnr) { if ($ordnr>0) echo '</tr>'; // ikke første rad $ordnr=$row['ord_nummer']; echo '<tr>'; // ny rad } echo '<td>'.$row['ord'].'</td>'; } echo '</table>'; <table> <tr><th>Språk1</th><th>Språk2</th><th>Språk3</th></tr> <tr><td>Hi</td><td>Hei</td><td>Hello</td></tr> <tr><td>Test</td><td>Test</td><td>Test</td></tr> </table> Endret 31. mai 2010 av Crowly 1 Lenke til kommentar
peace2 Skrevet 2. juni 2010 Forfatter Del Skrevet 2. juni 2010 SELECT e.ord, s.ord, n.ord FROM test AS s INNER JOIN test AS e ON e.ordnr = s.ordnr INNER JOIN test AS n ON e.ordnr = n.ordnr AND e.language = 'Norsk' AND s.language = 'Engelsk' AND n.language = 'Spansk' AND e.kapitel =1 AND s.kapitel =1 AND n.kapitel =1 Alternativt er som Ekko er inn på å løse dette i php echo '<table>'; echo '<tr><th>Språk1</th><th>Språk2</th><th>Språk3</th></tr>'; $result = mysql_query("SELECT ord_nummer, ord, språk FROM ordliste ORDER BY ordnr, språk"); $ordnr=-1; while ($row=mysql_fetch_assoc($result)) { if ($row['ord_nummer']!=$ordnr) { if ($ordnr>0) echo '</tr>'; // ikke første rad $ordnr=$row['ord_nummer']; echo '<tr>'; // ny rad } echo '<td>'.$row['ord'].'</td>'; } echo '</table>'; <table> <tr><th>Språk1</th><th>Språk2</th><th>Språk3</th></tr> <tr><td>Hi</td><td>Hei</td><td>Hello</td></tr> <tr><td>Test</td><td>Test</td><td>Test</td></tr> </table> SELECT e.ord, s.ord, n.ord FROM test AS s INNER JOIN test AS e ON e.ordnr = s.ordnr INNER JOIN test AS n ON e.ordnr = n.ordnr AND e.language = 'Norsk' AND s.language = 'Engelsk' AND n.language = 'Spansk' AND e.kapitel =1 AND s.kapitel =1 AND n.kapitel =1 Derjah! endlig fungerer 3-koloners løsningen Tusen takk!! øh jeg fikk aldri til før nå. det som forvirret meg mest var de bokstavene "e" "s" "n" , er det spesielle bokstaver? eller valgfrie? Hva kalles evt. den type spørring? kjekt om du hadde en link så jeg fikk lært mer om slike spørringer =) echo '<table>'; echo '<tr><th>Språk1</th><th>Språk2</th><th>Språ k3</th></tr>'; $result = mysql_query("SELECT ord_nummer, ord, språk FROM ordliste ORDER BY ordnr, språk"); $ordnr=-1; while ($row=mysql_fetch_assoc($result)) { if ($row['ord_nummer']!=$ordnr) { if ($ordnr>0) echo '</tr>'; // ikke første rad $ordnr=$row['ord_nummer']; echo '<tr>'; // ny rad } echo '<td>'.$row['ord'].'</td>'; } echo '</table>'; Viftene blåste noe voldsomt der ( lokal server ) fikk deretter: Fatal error: Maximum execution time of 60 seconds Sikkert en liten feil et sted? Lenke til kommentar
Ekko Skrevet 2. juni 2010 Del Skrevet 2. juni 2010 Derjah! endlig fungerer 3-koloners løsningen Tusen takk!! øh jeg fikk aldri til før nå. det som forvirret meg mest var de bokstavene "e" "s" "n" , er det spesielle bokstaver? eller valgfrie? Hva kalles evt. den type spørring? kjekt om du hadde en link så jeg fikk lært mer om slike spørringer =) Her brukes e, s og n som alias. Det er dette som gjøres i "test AS n" osv. Bokstavene er ikke spesielle, man kunne like godt skrevet "test AS norsk" og deretter brukt "norsk" alle stedene "n" er brukt. Det blir bare enklere og mer oversiktlig på denne måten. Viftene blåste noe voldsomt der ( lokal server ) fikk deretter: Fatal error: Maximum execution time of 60 seconds Sikkert en liten feil et sted? Stor database du har, hva var den nøyaktige spørringen du gjorde? Var det en databasemelding eller fra webserveren? Prøv å fjerne litt og litt av koden din for å se hvor problemet ligger. 1 Lenke til kommentar
Crowly Skrevet 2. juni 2010 Del Skrevet 2. juni 2010 Viftene blåste noe voldsomt der ( lokal server ) fikk deretter: Fatal error: Maximum execution time of 60 seconds Sikkert en liten feil et sted? Skriptet bruker mer enn 60 sekunder på å fullføre, og blir derfor stoppet når det når maks kjøretid. Dette kan være fordi det er er veldig mange rader eller andre ting som gjør at det tar lang tid å fullføre. Du kan prøve å legge til set_time_limit(150); i toppen av skriptet, 150 er antall sekunder skriptet for lov til å kjøre, sett det til den tiden du ønsker, eller 0 for ingen grense. Er ikke sikkert at dette er en effektiv måte å gjøre dette på. Er nok litt mer proof of concept. Det samme gjelder sql'en hvor samme tabell er koblet sammen tre ganger. Sikkert en del mer erfarne/kunnskapsrike brukere enn meg som evt. kan utbedre dette. 1 Lenke til kommentar
peace2 Skrevet 2. juni 2010 Forfatter Del Skrevet 2. juni 2010 Ok , jeg tror det er feil i php koden , skal feilsøke nærmere. første spørring ( i phpmyadmin ) der tar det 0,5 sekunder å liste opp. totalt er det ca 18 000 rader. Lenke til kommentar
peace2 Skrevet 2. juni 2010 Forfatter Del Skrevet 2. juni 2010 (endret) Laga en test tabell: PHP koden: <?php echo '<table>'; echo '<tr><th>language1</th><th>language2</th><th>language3</th></tr>'; $result = mysql_query("SELECT ordnr, ord, language FROM ordliste ORDER BY ordnr, language"); $ordnr=-1; while ($row=mysql_fetch_assoc($result)) { if ($row['ordnr']!=$ordnr) { if ($ordnr>0) echo '</tr>'; // ikke første rad $ordnr=$row['ordnr']; echo '<tr>'; // ny rad } echo '<td>'.$row['ord'].'</td>'; } echo '</table>'; ?> bilde av phpmyadmin view (ordliste tabellen): Feilmeldingen (web): Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource Noen som ser feilen? Endret 2. juni 2010 av peace2 Lenke til kommentar
Crowly Skrevet 3. juni 2010 Del Skrevet 3. juni 2010 (endret) Du kobler ikke til databasen i det skriptet, hele mitt test skript <?php echo '<table>'; echo '<tr><th>Språk1</th><th>Språk2</th><th>Språk3</th></tr>'."\n"; $conn=connect(); $result = mysql_query("SELECT ordnr, ord, language FROM test ORDER BY ordnr, language;"); $ordnr=-1; while ($row=mysql_fetch_assoc($result)) { if ($row['ordnr']!=$ordnr) { if ($ordnr>0) echo "</tr>\n"; // ikke første rad $ordnr=$row['ordnr']; echo '<tr>'; // ny rad } echo '<td>'.$row['ord'].'</td>'; } echo '</tr></table>'; function connect() { $host="127.0.0.1"; $user="brukernavn"; $pwd="*****"; $db="test"; if (!($link=@mysql_connect($host,$user,$pwd))) { echo "<p>Finner ikke databasen.</p>"; exit(); } if (!@mysql_select_db($db,$link)) { echo "<p>Kan ikke koble til databasen.</p>"; exit(); } return $link; } mysql_free_result($result); mysql_close($conn); ?> (Ikke nødvendig å legge tilkoblingen i en egen funksjon, men jeg sakset den inn fra mine normale rutiner, derfor ble det slikt...) Endret 3. juni 2010 av Crowly 1 Lenke til kommentar
peace2 Skrevet 9. juni 2010 Forfatter Del Skrevet 9. juni 2010 DerJA! Jeg hadde egentlig ferdig mal for å koble opp mot DB, jeg hadde bare glemt å bytte databasenavn til "test". Jeg bruker 2 test filer test.php -> inneholder websidenstema,kobling mot database , design osv. test2.php -> innholder kun test data. ( inkluderes i test.php) Lenke til kommentar
peace2 Skrevet 10. juni 2010 Forfatter Del Skrevet 10. juni 2010 (endret) Dukka opp noe morsomt nu. Nå listes alle tilgjenglige språk! Sku gjerne begrenset anntall språk til 3! Siste versjon av php kode: <?php mysql_select_db("test", $con); echo '<table border="1">'; echo '<tr><td>Engelsk</td><td>Fransk</td><td>Norsk</td></tr>'; $result = mysql_query("SELECT ordnr, ord, language FROM ordliste ORDER BY ordnr, language"); $ordnr=-1; while ($row=mysql_fetch_assoc($result)) { if ($row['ordnr']!=$ordnr) { if ($ordnr>0) echo '</tr>'; // ikke første rad $ordnr=$row['ordnr']; echo '<tr>'; // ny rad } echo '<td>'.$row['ord'].'</td>'; } echo '</table>'; ?> Tabell: ordliste SQl export data: -- phpMyAdmin SQL Dump -- version 3.1.1 -- http://www.phpmyadmin.net -- -- Vert: localhost -- Generert den: 10. Jun, 2010 02:13 AM -- Tjenerversjon: 5.1.30 -- PHP-Versjon: 5.2.8 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- Database: `test` -- -- -------------------------------------------------------- -- -- Tabellstruktur for tabell `ordliste` -- CREATE TABLE IF NOT EXISTS `ordliste` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ordnr` text NOT NULL, `ord` text NOT NULL, `language` text NOT NULL, `kapitel` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; -- -- Dataark for tabell `ordliste` -- INSERT INTO `ordliste` (`id`, `ordnr`, `ord`, `language`, `kapitel`) VALUES (1, '1', 'norsk1', 'Norsk', '1'), (2, '1', 'engelsk2', 'Engelsk', '1'), (3, '1', 'Fransk2', 'Fransk', '1'), (4, '2', 'norsk2', 'Norsk', '1'), (5, '2', 'engelsk1', 'Engelsk', '1'), (6, '2', 'Fransk1', 'Fransk', '1'), (7, '1', 'spansk', 'Spansk', '1'), (8, '2', 'spansk2', 'Spansk', '1'); Endret 10. juni 2010 av peace2 Lenke til kommentar
Crowly Skrevet 10. juni 2010 Del Skrevet 10. juni 2010 (endret) Sku gjerne begrenset anntall språk til 3! Du har fire språk i tabellen, skal du kun trekke ut tre så må du enten begrense dette i sql med WHERE, eller legge til noe i php som hopper over rader med det fjerde språket. Det beste er nok å håndtere dette i sql. // oppdatert sql med WHERE $sql="SELECT ordnr, ord, language FROM ordliste WHERE language IN ('Engelsk','Fransk','Norsk') ORDER BY ordnr, language"; $result = mysql_query($sql); Kan gjøre sql'en litt mer "dynamisk", noe ala dette $lang=''; if (isset($_POST['engelsk'])) // bør lage noe bedre sjekk, kun for å illustrere $lang="'Engelsk'"; if (isset($_POST['fransk'])) { if (empty($lang)) $lang="'Fransk'"; else $lang.=",'Fransk'"; } // repeter for hvert språk, finnes sikkert mer elegante metoder $sql=sprintf("SELECT ordnr, ord, language FROM ordliste WHERE language IN (%s) ORDER BY ordnr, language", $lang); $result = mysql_query($sql); Endret 10. juni 2010 av Crowly 1 Lenke til kommentar
peace2 Skrevet 11. juni 2010 Forfatter Del Skrevet 11. juni 2010 Der ja! Takker for all hjelp! 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å