SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden. |
 |
|

05-09-2004, 14:19
|
Mumubaer
Newbie
|
|
Registriert seit: Sep 2004
Beiträge: 15
|
|
[MSSQL] Datensätze zählen fehlgeschlagen :(
Hi Leute,
ich habe da ein (kleines) Problem mit mysql_num_rows
Folgendes: Ich will alle Datensätze zählen lassen, die in der Datenbank vorhanden sind. Aber: Es sollen jedoch nur die jenigen immer zusammen gezählt werden, die im Feld eine 2 oder 4 haben
Beispiel:
id | nummer | titel
--------------------------
1 | 2 | Hallo
2 | 4 | Hallo2
3 | 4 | Hallo3
4 | 2 | Hallo4
5 | 4 | Hallo5
Dabei sollte das dann so aussehen:
3 mal die Nummer 4 wiedergeben (Hallo2, Hallo3, Hallo5)
2 mal die Nummer 2 wiedergeben (Hallo, Hallo4)
meine Seite besteht aus einer Navigation (die dynamscih ist) und einer Mainpage. Dabei muss die kid von der Navigiation mit der kkid von der mainpage übereinstimmen.
habe es bis jetzt so geregelt. Hoffe Ihr versteht was ich will
Zitat:
SELECT tm.kkid, tl.kid FROM table_main AS pm, table_left AS tl WHERE pm.kkid = tl.kid
|
Leider gibt er die gesamte Datensatzanzahl raus  Komm da nicht weiter  Also: Hallo, Hallo2, Hallo3, Hallo4, Hallo5)
|

05-09-2004, 14:25
|
asp2php
Banned
|
|
Registriert seit: Feb 2004
Beiträge: 11.745
|
|
1. MSSQL != MySQL
2. Count und Group by sollte dir helfen
3. was sind table_main und table_left, die sind nirgends zu sehen => poste bitte zukünftig auch das, wovon du sprichst. Mit zusammenhangslose Gerede kann keiner was damit anfangen
|

05-09-2004, 14:57
|
Mumubaer
Newbie
|
|
Registriert seit: Sep 2004
Beiträge: 15
|
|
Also nochmal in Ruhe
Es gibt zwei tabellen (MYSQL  ):
1. [table_main]
-id
-kkid
-titel
2. [table_left]
-id
-kid
-titel
Dabei muss die kid mit der kkid übereinstimmen (das hbe ich so gemacht: WHERE (table_left.kid = table_main.kkid))
Funktioniert auch ganz gut alles
So nun sollen alle Einträge in kkid geordnet gezählt werden:
beispiel:
id | kkid | titel
-------------------
1 | 4 | Main
2 | 4 | Impressum
3 | 2 | Links
4 | 2 | Hot Links
5 | 4 | Counter
So nun sollen alle kkid mit 2 und 4 gezählt werden und angezeigt:
Also: kkid = 4 (3x mal); kkid = 2 (2x mal)
Habe es makl mit count probiert, aber der zählz jetzt nur kkid 4+2 zusammen also kommt 2 raus.
Code: $anzahl = count(mysql_query("SELECT kkid FROM table_main GROUP BY kkid", $dblink));
Was mache ich genau falsch, bzw tipps wären gut. danke!
|

05-09-2004, 16:54
|
asp2php
Banned
|
|
Registriert seit: Feb 2004
Beiträge: 11.745
|
|
Ich sprach von MySQL-Funktion COUNT und nicht von php-Funktion.
Probiere:
PHP-Code:
$sql = 'select count(id) as cnt from table_main group by kkid';
$res = mysql_query($sql,$dblink) or die(mysql_error());
$row = mysql_fetch_object($res);
echo $row->cnt;
EDIT: fehler korrigiert 
Geändert von asp2php (05-09-2004 um 18:44 Uhr)
|

05-09-2004, 17:27
|
Mumubaer
Newbie
|
|
Registriert seit: Sep 2004
Beiträge: 15
|
|
Bei deinem bekam ich eine Fehlermeldung (auch nach anpassung
hier nun mal der code der ganzen datei, vielleicht ist dann noch besser zu verstehen  :
PHP-Code:
$res = mysql_query("select *, count(id) as countkkid
from table_main group by kkid",$dblink) or die(mysql_error());
$row2 = mysql_fetch_object($res);
$result = mysql_query("SELECT * FROM table_left ORDER BY
sortieren ASC", $dblink);
while ($row = mysql_fetch_array($result)) {
echo'
<tr>
<td width="188" height="19" class="smallfont" background="images/cbg.gif">
<img src="images/bullet.gif">
<a href="index.php?kato=links&kid=' . $row["kid"] . '">
<b>' . $row["titel"] . '</b></a>';
echo ' (' . $row2 -> countkkid . ')';
echo '</td></tr>';
};
Die Einzelnen Navigationspunkte werden erfolgreich ausgelesen, nur hinter jedem Link steht jetzt nur eine 2. Muss ich bei der Schleife etwas ändern noch. Langsam bekommt das ganze aber eine Gestalt an, dank der Tipps... Sehe schon MySQL ist net so mein Fall  EDIT: linebreak sponsored by asp2php. Bitte demnächst selbst dafür sorgen. Danke.
Geändert von asp2php (05-09-2004 um 18:55 Uhr)
|

05-09-2004, 18:00
|
derHund
PHP Master
|
|
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
|
|
Zitat:
nur hinter jedem Link steht jetzt nur eine 2. Muss ich bei der Schleife etwas ändern noch.
|
das ist ja nicht mehr schön, was du hier fabrizierst
benutze nen join, um die beiden tabellen zu verbinden ...
poste mal bitte einen tabellen-dump, ... also alle befehle zum erstellen und füllen der beiden tabellen ... falls untenstehendes nicht funktioniert ...
Zitat:
1. [table_main]
-id
-kkid
-titel
2. [table_left]
-id
-kid
-titel
|
Code:
SELECT *, COUNT(kkid) counted
FROM table_main m
JOIN table_left l
ON m.kkid = l.kid
GROUP BY kkid
was ergibt diese abfrage? im php_my_admin zb.?
__________________
Die Zeit hat ihre Kinder längst gefressen
|

05-09-2004, 18:12
|
Mumubaer
Newbie
|
|
Registriert seit: Sep 2004
Beiträge: 15
|
|
hehe euer problemkind wieder
PHP-Code:
SELECT * , COUNT( kkid ) counted
FROM table_main m
JOIN table_left l ON m.kkid = l.kid
GROUP BY kkid
LIMIT 0 , 30
MySQL meldet:
You have an error in your SQL syntax near 'ON m.kkid = l.kid
GROUP BY kkid LIMIT 0, 30' at line 3
heißt das schonmal was gutes?
|

05-09-2004, 18:52
|
asp2php
Banned
|
|
Registriert seit: Feb 2004
Beiträge: 11.745
|
|
nicht so schlampig leute, wenn schon Alias eingesetzt, bitte auch entsprechend anwenden.
@Mumubaer: du brauchst nur 3 Sachen, also bitte kein select * verwenden, denn das ist verschwenderisch
Code:
select l.kid, l.titel, count(m.id) as cnt
from table_main m inner join table_left l
on m.kkid=l.kid
group by m.kkid
limit 0,30
|

05-09-2004, 19:06
|
Mumubaer
Newbie
|
|
Registriert seit: Sep 2004
Beiträge: 15
|
|
Wow also er zeigt jetzt folgendes an:
PHP-Code:
kid | titel | cnt
-------------------------
4 | Hot Links | 2
9 | Links | 1
So werde dann mal versuchen das ins navi einzubauen... ansonsten falls ihr gleich mal einen vorschlag habt (php code steht etwas weiter oben von der navi), dann einfach posten...
aber danke schonmal für diesen tipp!
gruß mumu
|

05-09-2004, 19:55
|
Mumubaer
Newbie
|
|
Registriert seit: Sep 2004
Beiträge: 15
|
|
Wollt nur bescheid geben das alles funzt! Vielen Dank Leute, habt mir sehr geholfen!
|

05-09-2004, 20:34
|
Mumubaer
Newbie
|
|
Registriert seit: Sep 2004
Beiträge: 15
|
|
hmm habe doch noch ein kleines problem:
PHP-Code:
SELECT m.fid, l.id, count( m.id ) AS countfid
FROM table_message m
INNER JOIN table_main l ON m.fid = l.id
WHERE ( $kid = l.kkid )
GROUP BY m.fid
ORDER BY l.id DESC;
Es werden ja nur die Links angezeigt, die auch einen wert m.fid haben, wie kann ich das umgehen, dass er auch die werte zeigt, die keinen m.fid gesetzt haben? langsam verstehe ich die syntax schon, nur ich weiß jetzt nicht was ich genau ändern soll. denk das hat mit m.fid = l.id zutun.
Gruß mumu
|

05-09-2004, 21:11
|
derHund
PHP Master
|
|
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
|
|
Zitat:
langsam verstehe ich die syntax schon,
|
probiers mal mit nem RIGHT JOIN bzw. LEFT JOIN
__________________
Die Zeit hat ihre Kinder längst gefressen
|

05-09-2004, 21:57
|
Mumubaer
Newbie
|
|
Registriert seit: Sep 2004
Beiträge: 15
|
|
das habe ich auch hier gefunden gehabt: http://www.w3schools.com/sql/sql_join.asp
aktueller code:
PHP-Code:
SELECT m.fid,l.id, l.ptitel,l.kkid, l.beschreibung, count(m.id) AS countfid FROM table_message m LEFT JOIN table_main l ON m.fid = l.id WHERE ($kid = l.kkid) GROUP BY m.fid ORDER BY l.id DESC
Also 3 von 5 Einträgen werden nur angezeigt, wobei die fehlenden 2 keine einträge in fid haben. jedoch sollen diese auch mit angezeigt werden. vielleicht hat noch jemand anderes eine idee..danke
gruß mumu
Geändert von Mumubaer (05-09-2004 um 22:01 Uhr)
|

05-09-2004, 22:31
|
derHund
PHP Master
|
|
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
|
|
probiers mal mit nem RIGHT JOIN
und sag bitte, in welcher tabelle was wo fehlen darf, ....
__________________
Die Zeit hat ihre Kinder längst gefressen
|

05-09-2004, 22:31
|
Mumubaer
Newbie
|
|
Registriert seit: Sep 2004
Beiträge: 15
|
|
hehe next spam
Habe es fast fertig, nur diese verflixt (einfache) sache noch:
PHP-Code:
SELECT table_main.id, table_message.fid, count( table_main.id )
FROM table_main
LEFT JOIN table_message ON table_message.fid = table_main.id GROUP BY table_main.id
Nun werden zwar alle Angezeigt, nur die jenigen, die kein fid haben, bekommen eine (1) hingesetzt... Jedoch ist das ja leer und somit (0). Wie kommt das:
Ausgabe sieht so aus:
PHP-Code:
id | fid | count( table_main.id )
----------------------------------------
1 | 1 | 1
2 | 2 | 3
3 | 3 | 1
5 | NULL | 1 <-- zeigt (1) an! aber soll (0) sein!
6 | NULL | 1 <-- zeigt (1) an! aber soll (0) sein!
7 | NULL | 1 <-- zeigt (1) an! aber soll (0) sein!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|