Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Finde Fehler in MySql Befehl nicht [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Finde Fehler in MySql Befehl nicht


 
sEeb
26-10-2004, 17:59 
 
Ich hoffe mir kann jmd helfen, ich schau da seid 2 Tagen drauf und seh den Fehler net, vermutlich ist es was ganz einfaches und ich bin schon betriebsblind

Ich habe Truppendaten gespeichert, mit
Anzahl (truppen_anzahl)
Kennnummer PID (truppen_nummer)
Einheitentyp (truppen_kennung)
Armee (armee)

Folgendes will ich erreichen, pro Armee sollte jeder Einheitentyp (truppen_kennung) nur einmal vorkommen, leider ist dies nicht der Fall und den Fehler muss ich ersteinmal beheben
Dazu will ich also alle Armeen finden, in denen ein Einheitentyp mehrfach vorkommt, um diese Einheitentypen zu löschen, und einen neuen Eintrag erstellen, der die Summe dieser ganzen Einheiten enthält, quasi die Summe der Spalte truppen_anzahl bei denen armee und truppen_kennung gleich ist

Ich dachte auch es funktioniert, aber manchmal kommen Zahlen raus, die ich nicht verstehe

Zum verständnis der SQL Code und dann ne Ausgabe, ich würde mich sehr freuen, wenn mir jemand helfen kann

Um diesen Befehl gehts


"SELECT DISTINCT t1.*, SUM(t1.truppen_anzahl) as anz
FROM truppen t1, truppen t2 WHERE t1.armee=t2.armee
AND t1.truppen_nummer<>t2.truppen_nummer
AND t1.truppen_kennung=t2.truppen_kennung
GROUP BY armee, truppen_kennung"





$query = "SELECT DISTINCT t1.*, SUM(t1.truppen_anzahl) as anz
FROM truppen t1, truppen t2 WHERE t1.armee=t2.armee
AND t1.truppen_nummer<>t2.truppen_nummer
AND t1.truppen_kennung=t2.truppen_kennung
GROUP BY armee, truppen_kennung";
$result = mysql_query($query, $link)
or die("Fehlersuche nicht erfolgreich");
while($row = mysql_fetch_array($result)) {
echo "nummer: ".$row[truppen_nummer].
" besitzer: ".$row[truppen_besitzer].
" kennung: ".$row[truppen_kennung].
" anzahl: ".$row[truppen_anzahl].
" armee: ".$row[armee]."<b> anz: ".$row[anz]."</b><br>";

$query1 = "SELECT t1.* as anz
FROM truppen t1
WHERE t1.armee=".$row[armee];//."
AND t1.truppen_kennung=".$row[truppen_kennung];
$result1 = mysql_query($query1, $link)
or die("Fehlersuche nicht erfolgreich");
while($row1 = mysql_fetch_array($result1)) {
if ($row1[truppen_kennung] == $row[truppen_kennung]) {
echo "+++ nummer: ".$row1[truppen_nummer]." besitzer: ".$row1[truppen_besitzer].
" kennung: <b>".$row1[truppen_kennung].
"</b><b> anzahl: ".$row1[truppen_anzahl].
"</b> armee: ".$row1[armee]."<br>";
}
else {
echo "+++ nummer: ".$row1[truppen_nummer].
" besitzer: ".$row1[truppen_besitzer].
" kennung: ".$row1[truppen_kennung].
"<b> anzahl: ".$row1[truppen_anzahl].
"</b> armee: ".$row1[armee]."<br>";
}
}
}



beispiel Ausgaben

da klappts zb

nummer: 220 besitzer: 5 kennung: 89 anzahl: 202 armee: 7 anz: 257
+++ nummer: 220 besitzer: 5 kennung: 89 anzahl: 202 armee: 7
+++ nummer: 24 besitzer: 5 kennung: 26 anzahl: 2 armee: 7
+++ nummer: 35 besitzer: 5 kennung: 58 anzahl: 99 armee: 7
+++ nummer: 42 besitzer: 5 kennung: 89 anzahl: 55 armee: 7
+++ nummer: 103 besitzer: 5 kennung: 183 anzahl: 1 armee: 7
+++ nummer: 185 besitzer: 5 kennung: 251 anzahl: 1 armee: 7

da net

nummer: 326 besitzer: 78 kennung: 341 anzahl: 90 armee: 62 anz: 294
+++ nummer: 326 besitzer: 78 kennung: 341 anzahl: 90 armee: 62
+++ nummer: 336 besitzer: 78 kennung: 343 anzahl: 1 armee: 62
+++ nummer: 610 besitzer: 78 kennung: 488 anzahl: 36 armee: 62
+++ nummer: 655 besitzer: 78 kennung: 488 anzahl: 1 armee: 62
+++ nummer: 676 besitzer: 78 kennung: 488 anzahl: 3 armee: 62
+++ nummer: 706 besitzer: 78 kennung: 488 anzahl: 1 armee: 62
+++ nummer: 782 besitzer: 78 kennung: 341 anzahl: 2 armee: 62
+++ nummer: 772 besitzer: 78 kennung: 341 anzahl: 2armee: 62
+++ nummer: 795 besitzer: 78 kennung: 341 anzahl: 4 armee: 62

der fehler beträgt den faktor 3, dass kann man ein paar mal beobachten, leider weiss ich net wie mir das helfen soltle :(

 
asp2php
27-10-2004, 09:11 
 
1. Code umbrechen, dass man kein 22" Moni braucht, um zu lesen.
2. was soll denn select t1.* as anz ... werden? (2. Abfrage)
3. Versuch mal so: (1. Abfrage)

SELECT DISTINCT t1.*, SUM(t1.truppen_anzahl) as anz FROM truppen t1
INNER JOIN truppen t2
ON t1.armee=t2.armee
AND t1.truppen_nummer<>t2.truppen_nummer
AND t1.truppen_kennung=t2.truppen_kennung
GROUP BY armee, truppen_kennung

// oder so

SELECT DISTINCT t1.*, SUM(t1.truppen_anzahl) as anz FROM truppen t1
INNER JOIN truppen t2
ON t1.armee=t2.armee
WHERE t1.truppen_nummer<>t2.truppen_nummer
AND t1.truppen_kennung=t2.truppen_kennung
GROUP BY armee, truppen_kennung

 
sEeb
27-10-2004, 09:14 
 
lustig dass wir zeitgleich on sind ;)

ich werde das mal ausprobieren, INNER JOIN sagt mir gar nix, werde mal nachschlagen was das macht

danke schonmal

 
asp2php
27-10-2004, 09:18 
 
Original geschrieben von asp2php
1. Code umbrechen, dass man kein 22" Moni braucht, um zu lesen.

:readthis: :readthis: :readthis: :readthis:

 
sEeb
27-10-2004, 17:46 
 
hab den code jetzt umgebrochen sry

deine vorschläge haben leider nichts gebracht, aber ich weiss zumindest wie es zum fehler kommt

vermutlich könnte man mit nem php konstrukt das problem umgehen, aber ne einfache sql anweisung wäre natürlich schöner

ich vermute folgendes: wenn eine kennung zweimal auftritt, zählt er richtig, kommt eine kennung innerhalb einer armee jedoch 3mal 4mal etc oft vor, zählt er die datensätze mehrfach, quasi: eine kennung kommt 3 mal vor, das ergebnis vergrössert sich umd en faktor 2, eine kennung kommt 4 mal vor, das ergebnis vergrössert sich umd en faktor 3

hat jemand ne idee, wie ich die mysql anweisung ändern muss, damit er diese datensätze eben nicht mehrfach zählt? ich dachte eigentlich das DISTINCT macht das, aber irgendwie wohl doch net

 
fuser
27-10-2004, 18:14 
 
Original geschrieben von sEeb
Folgendes will ich erreichen, pro Armee sollte jeder Einheitentyp (truppen_kennung) nur einmal vorkommen, leider ist dies nicht der Fall und den Fehler muss ich ersteinmal beheben



Wenn ich Dich richtig verstanden hab' bekommst Du
die fehlerhaften Datensätze und die richtige Anzahl so:

select
Armee,
count(distinct Einheitentyp) as AnzahlEinheit,
sum(truppen_anzahl) as truppen_anzahl
from truppen
group by Armee
having AnzahlEinheit>1

 
sEeb
27-10-2004, 18:18 
 
vielen dank having war das zauberwort, ich hab versucht das im where unterzubrignen da kannte er das count aber net

SELECT * , COUNT(*) AS counter, SUM(truppen_anzahl) AS anz
FROM truppen
GROUP BY armee, truppen_kennung
HAVING counter>1
ORDER BY counter DESC


danke an alle


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:37 Uhr.