SiiickBoy - 35
Experte
(offline)
Dabei seit 09.2009
1175
Beiträge
|
Geschrieben am: 26.08.2010 um 13:45 Uhr
Zuletzt editiert am: 26.08.2010 um 13:46 Uhr
|
|
Hallo Leute,
ich hab ein Problem.
Und zwar habe ich eine Tabelle die ich gerne mit Hilfe von PHP sortiert in ein Textdokument übertragen möchte.
Die Tabelle ist folgendermaßen aufgebaut:
cid ; sid ; no ; data;
cid = User-ID
sid = User-Daten
no = Untergliederung der User-Daten
data = Inhalte
Also z.B. cid (1), sid (1), no (0) ist der Vorname von User 1
cid (1), sid (2), no (0) ist der Nachname
cid (2), sid (4), no (0) ist die Straße von User 2
Ich bekomme mit folgendem Script alle Daten angezeigt und in eine Textdatei geschrieben (jedoch nicht sortiert)
for ($i = 1; $i < 15; $i++) {
for ($j = 1; $j < 13; $j++) {
$abfrage = "SELECT * FROM tabellenname WHERE sid = $i AND cid = $j";
$ergebnis = mysql_query($abfrage);
while($row = @mysql_fetch_object($ergebnis))
{
echo "$row->data";
// Datensätze in Datei schreiben
$dateiname = "instrumente.txt";
$open = fopen ($dateiname, "a+");
fwrite ($open, $row->data);
fclose ($open);
}
echo "<br />";
}
echo "<br />";
echo "<hr />";
}
könnt ihr mir helfen?
http://www.mixcloud.com/Studio43/hanzmis sionstudio43_chilli_sunday_funf_viertel_ stunden_edit/
|
|
SiiickBoy - 35
Experte
(offline)
Dabei seit 09.2009
1175
Beiträge
|
Geschrieben am: 26.08.2010 um 13:48 Uhr
|
|
Am besten wäre es, wenn ich jede einzelne "sid" einzeln abfragen könnte...aber das bereitet mir langsam echt Kopfschmerzen, weil ich nicht weiß wie ichs anstellen soll...
http://www.mixcloud.com/Studio43/hanzmis sionstudio43_chilli_sunday_funf_viertel_ stunden_edit/
|
|
scw - 41
Experte
(offline)
Dabei seit 09.2002
1836
Beiträge
|
Geschrieben am: 26.08.2010 um 13:53 Uhr
Zuletzt editiert am: 26.08.2010 um 13:54 Uhr
|
|
Versuchs mal mit dem Schlüsselwort Distinct im select um die SID eindeutig zu bekommen und dann nochmals nen select darauf
also SELECT DISTINCT sid FROM tabelle
|
|
scw - 41
Experte
(offline)
Dabei seit 09.2002
1836
Beiträge
|
Geschrieben am: 26.08.2010 um 13:56 Uhr
Zuletzt editiert am: 26.08.2010 um 13:57 Uhr
|
|
Es ist noch die frage, nach was du überhaupt sortieren willst??? gibt ja noch den SORT befehl bei nem select
EDIT: Natürlich nicht SORT sondern ORDER BY...
|
|
DER_SEXIST - 37
Profi
(offline)
Dabei seit 05.2010
471
Beiträge
|
Geschrieben am: 26.08.2010 um 13:58 Uhr
|
|
Zitat von scw: Versuchs mal mit dem Schlüsselwort Distinct im select um die SID eindeutig zu bekommen und dann nochmals nen select darauf
also SELECT DISTINCT sid FROM tabelle
DISTINCT bewirkt meiner Meinung nach aber nur, dass immer nur genau 1 Wert aus der Tabelle sid genommen wird... Also z. B. wenn der Wert in der Tabelle Hallo ist und Hallo in mehreren Datensätzen vorkommt, bewirkt DISTINCT, dass nur ein Datensatz bei welchem der Wert in sid "Hallo" ist ausgegeben wird... Die anderen werden ignoriert!
Greetz
|
|
scw - 41
Experte
(offline)
Dabei seit 09.2002
1836
Beiträge
|
Geschrieben am: 26.08.2010 um 13:59 Uhr
|
|
Zitat von DER_SEXIST: Zitat von scw: Versuchs mal mit dem Schlüsselwort Distinct im select um die SID eindeutig zu bekommen und dann nochmals nen select darauf
also SELECT DISTINCT sid FROM tabelle
DISTINCT bewirkt meiner Meinung nach aber nur, dass immer nur genau 1 Wert aus der Tabelle sid genommen wird... Also z. B. wenn der Wert in der Tabelle Hallo ist und Hallo in mehreren Datensätzen vorkommt, bewirkt DISTINCT, dass nur ein Datensatz bei welchem der Wert in sid "Hallo" ist ausgegeben wird... Die anderen werden ignoriert!
Greetz
Exakt... so hab ich auch seinen 2. Post verstanden, dass er es irgendwie so lösen könnte.
|
|
SiiickBoy - 35
Experte
(offline)
Dabei seit 09.2009
1175
Beiträge
|
Geschrieben am: 26.08.2010 um 14:01 Uhr
|
|
Zitat von scw: Es ist noch die frage, nach was du überhaupt sortieren willst??? gibt ja noch den SORT befehl bei nem select
EDIT: Natürlich nicht SORT sondern ORDER BY...
Ich möchte alle Inhalte von "sid 1" in eine Zeile der Textdatei... mit Trennzeichen wenn möglich...
Danach die von sid 2 in eine neue Zeile usw...
Also sid 1 z.B. hat cid 1-12, wobei bei cid die 3 z.B. 3 mal vorkommt... geburtstag, geburtsmonat und jahr...
http://www.mixcloud.com/Studio43/hanzmis sionstudio43_chilli_sunday_funf_viertel_ stunden_edit/
|
|
scw - 41
Experte
(offline)
Dabei seit 09.2002
1836
Beiträge
|
Geschrieben am: 26.08.2010 um 14:03 Uhr
Zuletzt editiert am: 26.08.2010 um 14:04 Uhr
|
|
Zitat von SiiickBoy: Zitat von scw: Es ist noch die frage, nach was du überhaupt sortieren willst??? gibt ja noch den SORT befehl bei nem select
EDIT: Natürlich nicht SORT sondern ORDER BY...
Ich möchte alle Inhalte von "sid 1" in eine Zeile der Textdatei... mit Trennzeichen wenn möglich...
Danach die von sid 2 in eine neue Zeile usw...
Also sid 1 z.B. hat cid 1-12, wobei bei cid die 3 z.B. 3 mal vorkommt... geburtstag, geburtsmonat und jahr...
Ich würde das Software- bzw. Datenbankdesign nochmals überdenken, wenn ich ehrlich bin! Gerade bei Geburtstag/Monat/Jahr könntet du eine Spalte nehmen und da einen Formatierten Zeitstempel oder sowas drin speichern.
EDIT: Und man sollte solche Magic Numbers möglichst vermeiden
|
|
Der666Diablo
Champion
(offline)
Dabei seit 04.2006
23736
Beiträge
|
Geschrieben am: 26.08.2010 um 14:04 Uhr
|
|
Zitat von DER_SEXIST: Zitat von scw: Versuchs mal mit dem Schlüsselwort Distinct im select um die SID eindeutig zu bekommen und dann nochmals nen select darauf
also SELECT DISTINCT sid FROM tabelle
DISTINCT bewirkt meiner Meinung nach aber nur, dass immer nur genau 1 Wert aus der Tabelle sid genommen wird... Also z. B. wenn der Wert in der Tabelle Hallo ist und Hallo in mehreren Datensätzen vorkommt, bewirkt DISTINCT, dass nur ein Datensatz bei welchem der Wert in sid "Hallo" ist ausgegeben wird... Die anderen werden ignoriert!
Greetz nein distinct bewirkt, das jeder wert nur einmal genommen wird,
also wensn zwei müllers gibt gibts nur eine ausgabe
Bei Geld, Sex und Kunst gibt es keinen abnehmenden Grenznutzen. http://shortlinks.de/oee9
|
|
SiiickBoy - 35
Experte
(offline)
Dabei seit 09.2009
1175
Beiträge
|
Geschrieben am: 26.08.2010 um 14:05 Uhr
|
|
Zitat von scw: Zitat von SiiickBoy: Zitat von scw: Es ist noch die frage, nach was du überhaupt sortieren willst??? gibt ja noch den SORT befehl bei nem select
EDIT: Natürlich nicht SORT sondern ORDER BY...
Ich möchte alle Inhalte von "sid 1" in eine Zeile der Textdatei... mit Trennzeichen wenn möglich...
Danach die von sid 2 in eine neue Zeile usw...
Also sid 1 z.B. hat cid 1-12, wobei bei cid die 3 z.B. 3 mal vorkommt... geburtstag, geburtsmonat und jahr...
Ich würde das Software- bzw. Datenbankdesign nochmals überdenken, wenn ich ehrlich bin! Gerade bei Geburtstag/Monat/Jahr könntet du eine Spalte nehmen und da einen Formatierten Zeitstempel oder sowas drin speichern.
Hehe... da geb ich Dir vollkommen Recht!
Leider wurde die Datenbank nicht von mir erstellt, sondern von einem CMS :)
http://www.mixcloud.com/Studio43/hanzmis sionstudio43_chilli_sunday_funf_viertel_ stunden_edit/
|
|
scw - 41
Experte
(offline)
Dabei seit 09.2002
1836
Beiträge
|
Geschrieben am: 26.08.2010 um 14:07 Uhr
|
|
SELECT * FROM tabelle ORDER BY cid, sid;
Gibt das nen Ergebnis, das dir gefällt?
|
|
DER_SEXIST - 37
Profi
(offline)
Dabei seit 05.2010
471
Beiträge
|
Geschrieben am: 26.08.2010 um 14:08 Uhr
|
|
Zitat von Der666Diablo: Zitat von DER_SEXIST: Zitat von scw: Versuchs mal mit dem Schlüsselwort Distinct im select um die SID eindeutig zu bekommen und dann nochmals nen select darauf
also SELECT DISTINCT sid FROM tabelle
DISTINCT bewirkt meiner Meinung nach aber nur, dass immer nur genau 1 Wert aus der Tabelle sid genommen wird... Also z. B. wenn der Wert in der Tabelle Hallo ist und Hallo in mehreren Datensätzen vorkommt, bewirkt DISTINCT, dass nur ein Datensatz bei welchem der Wert in sid "Hallo" ist ausgegeben wird... Die anderen werden ignoriert!
Greetz nein distinct bewirkt, das jeder wert nur einmal genommen wird,
also wensn zwei müllers gibt gibts nur eine ausgabe
Also genau das, was ich gepostet habe
|
|
DER_SEXIST - 37
Profi
(offline)
Dabei seit 05.2010
471
Beiträge
|
Geschrieben am: 26.08.2010 um 14:12 Uhr
|
|
Zitat von scw: SELECT * FROM tabelle ORDER BY cid, sid;
Gibt das nen Ergebnis, das dir gefällt?
Den Ansatz finde ich nicht schlecht:
Ich würde es mal so versuchen...
SELECT * FROM tabelle ORDER BY ASC;
Das ASC bedeutet, dass die Datensätze aufsteigend ausgegeben werden...
Also von 1 aufwärts...
|
|
SiiickBoy - 35
Experte
(offline)
Dabei seit 09.2009
1175
Beiträge
|
Geschrieben am: 26.08.2010 um 14:12 Uhr
Zuletzt editiert am: 26.08.2010 um 14:12 Uhr
|
|
Zitat von scw: SELECT * FROM tabelle ORDER BY cid, sid;
Gibt das nen Ergebnis, das dir gefällt?
So bekomme ich ja alle Daten in der richtigen Reihenfolge angezeigt:
for ($i = 1; $i < 15; $i++) {
for ($j = 1; $j < 13; $j++) {
$abfrage = "SELECT * FROM table WHERE sid = $i AND cid = $j";
$ergebnis = mysql_query($abfrage);
while($row = @mysql_fetch_object($ergebnis))
{
echo "$row->data";
Aber leider muss ich es irgendwie hinbekommen, dass diese auch in meiner Textdatei so ausgegeben werden.
Also nicht alles in einer Zeile, sondern auch schön mit Leerzeichen und Absätzen getrennt (wenn ein neuer Datensatz anfängt)
http://www.mixcloud.com/Studio43/hanzmis sionstudio43_chilli_sunday_funf_viertel_ stunden_edit/
|
|
scw - 41
Experte
(offline)
Dabei seit 09.2002
1836
Beiträge
|
Geschrieben am: 26.08.2010 um 14:13 Uhr
|
|
Zitat von DER_SEXIST: Zitat von scw: SELECT * FROM tabelle ORDER BY cid, sid;
Gibt das nen Ergebnis, das dir gefällt?
Den Ansatz finde ich nicht schlecht:
Ich würde es mal so versuchen...
SELECT * FROM tabelle ORDER BY ASC;
Das ASC bedeutet, dass die Datensätze aufsteigend ausgegeben werden...
Also von 1 aufwärts...
Afaik muss man doch noch ne Spalte beim ORDER BY angeben Wenn man übrigens kein ASC oder DSC angibt, wird per default ASC verwendet.
|
|
DER_SEXIST - 37
Profi
(offline)
Dabei seit 05.2010
471
Beiträge
|
Geschrieben am: 26.08.2010 um 14:13 Uhr
|
|
Das ist schon ein ziemlicher "Hardmode", das übers TU-Forum zu lösen
|
|