datadexx
Goto Top

MySQL Daten erfassen und in CSV eintragen

Puhh, google ist durch...

Folgendes Problem.

Von einem Formular (checkboxen die angehakt werden) bekomme ich an ein weiteres PHP Script die ids von den Datensätzen übermittelt, sieht so aus:

<option name='pos' value='1000'>text</option>
<option name='pos[1]' value='1001'>text</option>
<option name='pos[2]' value='1002'>text</option>
<option name='pos[3]' value='1003'>text</option>

In den empfangenden PHP Script muss jetzt für jede der ID's eine SQL Abfrage gestartet werden.

SELECT field1, field2, field3 FROM tabelle WHERE id=pos. Geht ja mit foreach.

Die so ermittelteten Daten jeder Abfrage müssen dann in eine csv Datei geschrieben werden.

Und hier liegt mein Problem, das bekomme ich nicht hin.

Quasi sollt das so ungefähr ablaufen:

1. Datensatz ermitteln -> eintragen in die CSV Datei
2. Datensatz ermitteln -> eintragen in die CSV Datei

usw.

Jemand ne IDEE???

Content-Key: 206461

Url: https://administrator.de/contentid/206461

Printed on: April 23, 2024 at 08:04 o'clock

Member: datadexx
datadexx May 14, 2013 at 18:17:15 (UTC)
Goto Top
Mein bisheriger code. Ich erhalte aber immer nur den letzten Datensatz face-sad

foreach ($raexp as $__W)
{
$datensatz = StarteSQLQuery("

SELECT

field1,
field2, field3, field4 usw.

WHERE id=$__W


");

}

$max = 65534;
for ($i=0;$i <= $max;$i++)
{
$filename .= chr(rand(97,122));
}
$handle=fopen("pfad zur Datei".$filename.".csv", "wb");

while($row=mysql_fetch_array($datensatz))
{
$data="";
foreach ($row as $key => $value)
{
if (is_numeric($key))
{
$a=rawurlencode($value);
$a=str_replace("%0D%0A","",$a);
$a=rawurldecode($a);
$a=str_replace(";","-",$a);
$data.=$a.";";
}
}
fwrite($handle, $data."\n");
}
fclose($handle);
print("
Download der .csv Datei: <a href='pfad zur datei".$filename.".csv'> Download</a>");
Member: Arano
Arano May 14, 2013 at 20:39:49 (UTC)
Goto Top
Hi datadexx

  1. Begrüßung
  2. Formatierungshilfen und
  3. Höflichkeit / Freundlichkeit

@problem:
  1. Du hast da einen Gedankenfehler (Logikfehler). In der ersten Schleife wird das Ergebnis des Queries immer in die gleiche Variabel gespeichert... also ÜBERSCHREIBT jeder weiterer Schleifendurchlauf das Ergebnis des Vorherigen, so bleibt am Ende auch nur eins über - das Letzte.
  2. Du startest für jede ID eine eigene Abfrage an die Datenbank... kannst du die nicht in eine zusammenfassen !?
    SELECT ...
      FROM ...
     WHERE id=x OR id=x OR id=x
    Dann würdest du mit einer einzigen Abfrage eine Ergebnistabelle erhalten die alle gewünschten Datensätze enthält face-wink


Gute Nacht face-smile
~Arano
Member: datadexx
datadexx May 15, 2013 updated at 05:34:48 (UTC)
Goto Top
Guten Morgen!

Ja sorry, gestern war spät und der Kopf durch...

Es gibt doch meine ich auch sowas wie WHERE id IN...

Wie umgehe ich denn das Problem des überschreibens in der foreach Schleife, wenn die Sammelabfrage nicht klappen sollte?

Vielen Dank für Hilfe!

Greetz
Member: datadexx
datadexx May 15, 2013 updated at 05:34:15 (UTC)
Goto Top
Ich hab noch eine Frage wegen der Zusammenfassung der Datensätze.

Jeder Datensatz mit seiner id muss eine Zeile in der csv ergeben, da diese nachher maschinell weiterverarbeitet wird.

Wenn die Daten zusammengefasst werden, erhalte ich ja nur einen Datensatz mit allen Ergebnissen.

Nochmals Danke für Hilfe!

Greetz
Member: Arano
Arano May 15, 2013 at 06:20:05 (UTC)
Goto Top
Moin moin.

Wenn die Daten zusammengefasst werden, erhalte ich ja nur einen Datensatz mit allen Ergebnissen.
Nein, nicht ganz !
Wenn du alles "auf einmal" abfragst (egal ob per WHERE IN() oder WHERE id= OR id= OR ...) erhältst du eine Ergebnistabelle mit __mehreren__ Datensätzen - jede Zeile der Tabelle entspricht dabei einem Datensatz.

Diese Ergebnistabelle kannst du dann in einer Schleife abarbeiten z.B.
$ergbnistab = mysql_query( "SELECT ... WHERE ..." );  
while( $datansatz=mysql_fetch_assoc($ergebnistab) )
{
    // verarbeite daten
    echo $datensatz['id'].'<br>';  
    echo 'Sein Name war: '.$datensatz['vorname'].'<br>';  
    fwrite( $hndCVS, implode( ";", $datensatz ) );  
}


~Arano
Member: datadexx
datadexx Sep 24, 2013 updated at 09:56:37 (UTC)
Goto Top
Hallo Leute und guten Morgen,

leider konnte ich lange nicht an diesem Problem weiter arbeiten. Dank der tollen Hilfe von ~Arano bin ich hier zwar schon weit gekommen, stehe aber wieder vor einem Problem wo ich die Hilfe von euch MYSQL Profis benötige.

In folgender Abfrage benötige ich an der markierten Stelle alle Werte der INNER JOIN (SELECT...) Abfrage in einer Zelle. Die INNER JOIN Abfrage liefert (im Moment) 10 Ergebnisse zurück, wodurch beim Ergebnis 10 ROWS entstehen. Das kann ich leider so nicht gebrauchen, ich brauche die 10 Ergebnisse der Subquery von INNER JOIN in einer Zelle. Diese hab ich mit <- in der Abfrage markiert.

Wäre total super wenn da ein Profi von euch helfen könnte.

SELECT

a.ra_adr,
a.ra_srvcodes,
a.ra_kdnr,
a.bmyid,
trim(a.BFirma) AS EF,
f.dm1,
trim(a.BStr) as ESTR,
f.dm2,
trim(b.lkz) as ELKZ,
b.PLZ,
trim(b.Ort) as EORT,
f.dm3,
f.dm4,
f.dm5,
f.dm6,
f.dm7,
f.dm8,
f.dm9,
a.ra_kdnr,
trim(i.Firmenname) AS OFRMA,
f.dm10,
trim(i.Strasse) as OSTR,
f.dm11,
i.own_lkz,
i.PLZ as iplz,
trim(i.Ort) as iort,
a.amyid,
trim(a.AFirma) as LFRMA,
f.dm12,
trim(a.AStr) as LSTR,
f.dm13,
trim(c.lkz) as clkz,
c.PLZ as cplz,
trim(c.Ort) as cort,
a.ra_ndlsg,
a.ra_ndlsg as ra_spedkdnr,
a.ra_frankatur,
f.dm14,
f.dm15,
a.AANr,
f.dm16,
f.dm17,
f.dm18,
f.dm19,
f.dm20,
f.dm21,
f.dm22,
f.dm23,
f.dm24,
f.dm25,
f.dm26,
f.dm27,
f.dm28,
f.dm29,
a.ra_pos,
FORMAT(a.ta_anzahl,0) as anzahl,
d.raben_id,
a.ta_ware,
ROUND(a.ta_gewicht) as gewicht,
f.dm30,
f.dm31,
f.dm32,
f.dm33,
f.dm34,
FORMAT(a.ta_ldm,0) as Lademeter,
f.dm35,
f.dm36,
f.dm37,
CONCAT('00',(g.nve)) AS NVE <- AN dieser Stelle benötige ich alle 10 Ergebnisse der INNER JOIN Subquery.

FROM aauftrag AS a

LEFT JOIN part as d ON a.ta_ldmart = d.Lademittel
LEFT JOIN kundenstamm as b ON a.bmyid = b.MYID
LEFT JOIN kundenstamm as c ON a.amyid = c.MYID
LEFT JOIN firmendaten as i ON a.ra_kdnr = i.ra_kdnr
LEFT JOIN raben_dummys as f ON a.ra_kdnr = f.ra_kdnr

INNER JOIN (SELECT nve,aanr FROM raben_nve2ta) as g ON a.AANr = g.aanr

WHERE a.AANr IN (201305460)