Avatar billede leif Seniormester
02. oktober 2006 - 19:27 Der er 20 kommentarer og
1 løsning

Export to CSV

Hej,

Jeg har kigget på http://www.phpfreaks.com/tutorials/114/0.php og det er jo lige til.

Men nu er det sådan at jeg i min tabel har et felt som hedder kundeid, det skal erstattes med personen Navn, Adresse osv. fra Tabellen kunder.

Det kan jeg ikke lige gennemskue hvordan man skal gøre.

Desuden kan kundeid stå¨der flere gange, men der skal jeg kun have kundeid ud 1 gang, men tilgengæld skal feltet arr sammentrækkes og adskilles af et ,

Således jeg får følgende ud:
Navn | Adresse | Post | Arr
Leif | Gadenavn | 0900 | 1, 2, 8, 9



| er selvfølgelig , i filen.

Hvis der er en som vil hjælpe mig på vej ?

På forhånd tak

/Leif
Avatar billede arne_v Ekspert
03. oktober 2006 - 02:48 #1
du laver en join af de to tabeller og selekterer de rette kolonner

du skal modificerer logikken lidt så tester på om arr er den samme som den forrige
inden du går igang med at udskrive rækken for at få arr konkataneret
Avatar billede leif Seniormester
03. oktober 2006 - 09:27 #2
Hvid du får af vide jeg arbejder i PHP kan du så komme med noget kode, da jeg virkelig er på bar bund
Avatar billede arne_v Ekspert
03. oktober 2006 - 12:38 #3
ja

men jeg har først tid senere
Avatar billede leif Seniormester
03. oktober 2006 - 20:32 #4
Du siger bare til
Avatar billede arne_v Ekspert
04. oktober 2006 - 04:52 #5
CREATE TABLE u (
    uid INTEGER,
    name VARCHAR(20),
    PRIMARY KEY(uid)
);

CREATE TABLE ref (
    rid INTEGER,
    uid INTEGER,
    PRIMARY KEY(rid)
);

INSERT INTO u VALUES(1,'A A');
INSERT INTO u VALUES(2,'B B');

INSERT INTO ref VALUES(1,1);
INSERT INTO ref VALUES(2,1);
INSERT INTO ref VALUES(3,1);
INSERT INTO ref VALUES(4,2);
INSERT INTO ref VALUES(5,2);
Avatar billede arne_v Ekspert
04. oktober 2006 - 04:53 #6
<?php
header("Content-Type: text/plain");
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("Test") or die(mysql_error());
$sql = mysql_query("SELECT u.name AS name, ref.rid AS rid FROM u LEFT JOIN ref ON u.uid=ref.uid");
$antal = mysql_num_fields($sql);
$file_sql = "";
while($row = mysql_fetch_array($sql)) {
    $file_sql .= $row['name'];
    $file_sql .= ";";
    $file_sql .= $row['rid'];
    $file_sql .= "\n";
}
echo $file_sql;
?>
Avatar billede arne_v Ekspert
04. oktober 2006 - 04:53 #7
A A;1
A A;2
A A;3
B B;4
B B;5
Avatar billede arne_v Ekspert
04. oktober 2006 - 04:53 #8
<?php
header("Content-Type: text/plain");
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("Test") or die(mysql_error());
$sql = mysql_query("SELECT u.name AS name, ref.rid AS rid FROM u LEFT JOIN ref ON u.uid=ref.uid");
$antal = mysql_num_fields($sql);
$file_sql = "";
$last_name = "<notexist>";
while($row = mysql_fetch_array($sql)) {
    if($row['name'] == $last_name) {
        $file_sql .= ",";
        $file_sql .= $row['rid'];
    } else {
        if($last_name != "<notexist>") $file_sql .= "\n";
        $file_sql .= $row['name'];
        $file_sql .= ";";
        $file_sql .= $row['rid'];
        $last_name = $row['name'];
    }
}
$file_sql .= "\n";
echo $file_sql;
?>
Avatar billede arne_v Ekspert
04. oktober 2006 - 04:53 #9
A A;1,2,3
B B;4,5
Avatar billede arne_v Ekspert
04. oktober 2006 - 04:54 #10
Jeg er ikke nogen ørn til PHP, men jeg håber at eksemplerne har givet lidt
indblik i hvad jeg mumler om.
Avatar billede arne_v Ekspert
06. oktober 2006 - 02:58 #11
OK ?
Avatar billede leif Seniormester
06. oktober 2006 - 10:15 #12
Jeg har ikke fået kigget på det, men regner med at gøre det i aften
Avatar billede leif Seniormester
12. oktober 2006 - 22:14 #13
Skal man lave u.name as name osv eller kan man undgå dette ?
Avatar billede arne_v Ekspert
12. oktober 2006 - 22:22 #14
jeg mener at du skal hvis du vil referere til kolonnerne i $row ved navn men at du kan
vaelge at referere ved nummer
Avatar billede leif Seniormester
12. oktober 2006 - 22:23 #15
Hmm, jeg får følgende fejl:
<b>Warning</b>:  mysql_num_fields(): supplied argument is not a valid MySQL result resource in <b>/var/www/virtual/xxxxxx/public_html/csv.php</b> on line <b>10</b><br />
Avatar billede leif Seniormester
12. oktober 2006 - 22:26 #16
Nevermind, jeg skal jo huske at skrive tabel navne korrekt !
Avatar billede leif Seniormester
12. oktober 2006 - 22:40 #17
Hmm, har faktisk et problem. Den sætter uid to gange fordi at der er spring mellem rid Fx. har uid 102 rid 10,11,15,16

Så får jeg:
102;10,11
102;15,16
Avatar billede leif Seniormester
12. oktober 2006 - 23:53 #18
Den har jeg løst nemt ! Jeg sorterer bare således at uid står sammen.

Men ved du hvorfor jeg ikke må:
$filnavn = "tempfile.csv";
$fp = fopen($filnavn, "w+");
fputs('$file_sql', $fp);
fclose($fp);

Så får jeg:
Warning: fputs(): supplied argument is not a valid stream resource in /var/www/virtual/xxxxxxxx/public_html/csv.php on line 58
Avatar billede leif Seniormester
13. oktober 2006 - 00:03 #19
Dumme slåfejl
Avatar billede arne_v Ekspert
13. oktober 2006 - 00:49 #20
det virker som om du finder ud af problemerne selv

:-)
Avatar billede leif Seniormester
13. oktober 2006 - 08:50 #21
Alle sammen har været dumme slåfejl, jeg tror jeg var lidt stresset da jeg kiggede på det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester