php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.05.2006, 15:52  
Benutzer
 
Registriert seit: 28.02.2005
Beiträge: 30
Rio99
Standard Einträge zählen

Ich bin im Moment an einem kleinen Support Ticket System und bin jetzt dran die Tickets auszulesen.

id | relatedid | userid
1 | -1 | 1
2 | 1 | 2
3 | 1 | 1
4 | -1 | 1

Related ID steht für -1 wenn es ein neues Ticket ist oder eben für die ID des Tickets sozusagen dann die Antwort darauf. Nun möchte ich beim auslesen schaun wieviele Antworten das Ticket schon hat.
Mein bisheriges MySQL Query macht das eigentlich recht gut doch wenn das Ticket keine Antwort hat, wie man oben bei ID 4 sieht, dann gibt er es mir überhaupt nicht aus sondern nur das Ticket mit ID 1.

Code:
SELECT s1.*, COUNT("s2.id") AS answers FROM support AS s1, support AS s2 WHERE s1.relatedid="-1" && s1.userid="1" && s2.relatedid = s1.id GROUP BY s2.id
Jemand Ahnung was ich falsch mache?
Rio99 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.05.2006, 16:13  
Benutzer
 
Registriert seit: 28.02.2005
Beiträge: 30
Rio99
Standard

Keiner eine Idee?
Rio99 ist offline   Mit Zitat antworten
Alt 16.05.2006, 16:19  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Bei solchen Fragen wärs immer super, einfach nen SQL-Dump mitzuliefern, dann kann man selbst testen. So theoretisch versteh ich grad nicht was du vorhast, was willst du für ein Ergebnis?
Zitat:
CREATE TABLE `support` (
`id` int(11) NOT NULL auto_increment,
`relatedid` int(11) NOT NULL default '-1',
`userid` int(11) NOT NULL default '2',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=5 ;

--
-- Daten für Tabelle `support`
--

INSERT INTO `support` VALUES (1, -1, 2);
INSERT INTO `support` VALUES (2, 1, 2);
INSERT INTO `support` VALUES (3, 1, 1);
INSERT INTO `support` VALUES (4, -1, 1);
(für die, dies noch testen wollen)

Und was ist COUNT("s2.id")? "s2.id" ist ein String, aber du möchtest doch nach s2.id als Spalte zählen oder?
Zergling-new ist offline   Mit Zitat antworten
Alt 16.05.2006, 16:25  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Zergling
So theoretisch versteh ich grad nicht was du vorhast, was willst du für ein Ergebnis?
Geht mir genauso. Und das liegt sicherlich auch daran, dass der Text reichlich konfus ist.
  Mit Zitat antworten
Alt 16.05.2006, 22:42  
Benutzer
 
Registriert seit: 28.02.2005
Beiträge: 30
Rio99
Standard

Ok, dann versuch ichs eben nochmal zu beschreiben Ich habe ein Support Ticket System das besteht aus einer Tabelle namens support. Diese Tabelle hat x Felder jedoch sind im Moment eigentlich nur 2 wichtig das wäre einmal die ID und einmal die RelatedID. Die ID wird einfach erhöht es kann also ein neues Support Ticket sein oder eine Antwort eines Admins auf ein Support Ticket. Die RelatedID ist entweder -1 dann wäre es ein neues Support Ticket oder eben die ID des Support Tickets auf das dann eben eine Antwort z.B. eines Admin kommt.

Bsp: Der User1 erstellt ein Support Ticket:
id | relatedid | userid
1 | -1 | 1

Nun geht der Admin2 her und schreibt darauf eine Antwort
id | relatedid | userid
2 | 1 | 2

Nun gibt es auf das Support Ticket mit ID 1 eine Antwort und genau das möchte ich beim auslesen auch dabei haben. Ich lese also wie im ersten Post gesagt alle Support Tickets von User1 (ID 1) aus die RelatedID -1 haben also ein neues Support Ticket sind. Jetzt möchte ich aber gleichzeitig noch schaun ob es ein Eintrag mit RelatedID = der ID des aktuellen Support Tickets gibt und dann eben wenn es eine, oder mehrere Antworten gibt diese eben zählen (durch COUNT). Praktisch wie im oberen Query ganz gut klappt aber dann hab ich das Problem das wenn ein Support Ticket noch keine Antwort bekommen hat es einfach nicht ausgelesen wird da dann die WHERE Anfrage nicht stimmt da es kein Eintrag mit RelatedID = der ID des aktuellen Support Tickets gibt. Wie kann ich also das umgehen ohne noch ein zweites Query zu bauen?
Ich hoffe jetzt ist es verstanden
Rio99 ist offline   Mit Zitat antworten
Alt 19.05.2006, 06:54  
Benutzer
 
Registriert seit: 28.02.2005
Beiträge: 30
Rio99
Standard

Sagt jetzt nicht ihr habt trotz meiner jetzt ausführlicheren Beschreibung trotzdem keine Ideen?
Rio99 ist offline   Mit Zitat antworten
Alt 19.05.2006, 07:41  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Zergling
Und was ist COUNT("s2.id")? "s2.id" ist ein String, aber du möchtest doch nach s2.id als Spalte zählen oder?
Also zunächstmal ... Hast das schon korrigiert ?????

Desweiteren kann deine Abfrage ja nicht zutreffen wenn du AND mit einbaust .. Wenn dann müsstest du dort schon noch ein OR mit einbauen damit deine Abfrage auch zutrifft wenn dort "-1" drin steht
M3g4Star ist offline   Mit Zitat antworten
Alt 19.05.2006, 14:04  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Das wird nie funktionieren. Woher soll denn die DB wissen, welche Daten aus S1 zusammen mit dem Zähler ausgegeben werden sollen. Bei Abfragen mit Aggregats-Variablen müssen immer alle Attribute, die ausgegeben werden sollen, auch in der GROUP BY-Klausel stehen. Deshalb geben viele DB-Systeme (Oracle, MSSql) auch einen Fehler zurück, wenn das nicht der Fall ist.
Deshalb wirst du nicht um zwei Abfragen herum kommen.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
oracle zählen von einträgen

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.