Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Kleines SQL-Problemchen :D

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 10.11.2008, 22:18    Titel: Kleines SQL-Problemchen :D Antworten mit Zitat

Ich steh aufm Schlauch beim Zusammenfassen von 2 queries...

Ich hab zwei Tabellen, die tabelle "articles" mit der spalte "id" und die tabelle "comments" mit der spalte "article_id", die auf einen artikel aus vorheriger tabelle verweist.

nun möchte ich möglichst mit eineme query alle artikel nacheinander ZUSAMMEN mit der anzahl der damit verbundenen kommentare ausgeben.

Zitat:

SELECT
articles.*,
COUNT(comments.id)
FROM
articles, comments
GROUP BY
articles.id


erleuchtet mich! grinsen
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 11.11.2008, 18:00    Titel: Antworten mit Zitat

SELECT
*
FROM
articles, comments
where articles.id=comments.article_id


funktioniert???
da musste aber auch noch aufpassen.
wenn es keine comments gibt für einen Artikel, wird der nicht angezeigt.
Probier es mal damit (weiß nicht ob das stimmt)

SELECT
*
FROM
articles, comments
where articles.id=comments.article_id (+)

oder

SELECT
*
FROM
articles, comments
where articles.id (+) =comments.article_id

ich glaub das ganze heißt right outer join oder so
MfG

/edit da fällt mir ein ich hab dich glaub ich missverstanden.. sry

also noch ein Versuch

select article_id,count(*) from comments
group by article_id
dieses select gruppiert schonmal alle die für die es EInträge in der Tabelle Comments gibt. den Rest kannste mit union hinzufügen:

select article_id,count(*) from comments
group by article_id
union all

select id,0 from articles where id not in (select article_id from comments)

weiß jetzt nicht ob das klappt (hab es ja nicht ausprobiert), aber kannste ja mal Feedback geben.
MfG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 11.11.2008, 18:48    Titel: Antworten mit Zitat

so ganz klappen tut das alles nicht... :\
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 11.11.2008, 18:56    Titel: Antworten mit Zitat

was genau funktioniert denn nicht????
haste dei Statements mal einzeln ausprobiert???
was für Fehlermeldungen werden angezeigt??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 11.11.2008, 19:06    Titel: Antworten mit Zitat

ist immer irgendwo ein syntax-fehler. Zunge rausstrecken
nur beim letzten glaub ich kam was zurück, aber das war auch nicht sonderlich sinnvoll.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 11.11.2008, 19:18    Titel: Antworten mit Zitat

Na dann, kann ich dir auch nicht helfen grinsen

Zitat:

SELECT
articles.*,
COUNT(comments.id)
FROM
articles, comments
GROUP BY
articles.id


ich kann dir vielleicht helfen, dein biusheriges select Statement zu verbessern. Das Auswählen von articles.*, kann schonmal nicht gehen
da du nur nach articles.id gruppierst. Kann ja nicht gehen, für jede article.id Gruppe kämen ja je nachdem mehrere andere Zeilen für articles.* in Frage. Du kannst nur sachen auswählen, nachdenen du acuh gruppierst. Eventuell hilft dir das weiter:
http://www.adp-gmbh.ch/ora/sql/analytical/partition_by.html

articles, comments
Dieses kartesische Produkt hat keinerlei Aussagekraft. Jede Artikel Zeile
wird mit jeder comments Zeile verknüpft, weswegen das COUNT immer die Anzahl der Einträge in comments ausgeben sollte. Wenn dass musst du das schon verknüpfen mit where.

MfG
[/quote]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 11.11.2008, 19:31    Titel: Antworten mit Zitat

GROUP by soll nicht mit * funktionieren? wäre mir fremd. grinsen
so wie im letzten posting hatte ich das aber auch schon. da kommt bei allen artikeln dann die selbe anzahl kommentare.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 11.11.2008, 19:42    Titel: Antworten mit Zitat

nein das geht nicht, zumindest nicht mit dem SQL das wir bei uns im Geschäft verwenden mit den Augen rollen
das ergibt auch keinen Sinn nach allem zu gruppieren, da keine Spalte doppelt vorkommen kann (wegen primary keys) und dass group by dann nix bewirken würde.

SELECT
articles.*,
COUNT(comments.id)
FROM
articles, comments
GROUP BY
articles.id

versuch es mal mit:

SELECT
articles.*,
COUNT(comments.id)
FROM
articles, comments
where id=article_id
GROUP BY
articles.id
läuft das Statement durch??
möchte jetzt nicht behaupten, dass das die Lösung ist die du suchst.
es zeigt nur die Sachen an, für die es auch Kommentare gibt.(womöglich garnix)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 11.11.2008, 19:45    Titel: Antworten mit Zitat

Code:
where id=article_id

ging natürlich nicht ohne weiteres (comments hat auch 'ne id), aber genau, diese abfrage gibt nur die einträge mit kommentaren aus.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 11.11.2008, 19:49    Titel: Antworten mit Zitat

dann musst du die Namen der Tabellen davorschreiben.
articles.id=comments.article_id
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 11.11.2008, 19:54    Titel: Antworten mit Zitat

ach nee, doof bin ich net grinsen damit funktioniert's ja nicht.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 11.11.2008, 19:58    Titel: Antworten mit Zitat

hmmm, interessant wäre es, den Inhalt der Tabellen zu kennen(auszugsweise), dann könnte man das weiter analysieren.

Versuch mal das:

SELECT
articles.id,
COUNT(*)
FROM
articles, comments
where articles.id=comments.article_id
GROUP BY
articles.id

MfG


MfG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 11.11.2008, 20:05    Titel: Antworten mit Zitat

funktioniert auch nicht.

der inhalt lässt sich leicht beschreiben:

articles:
Code:

id  | text      | weitere spalten
----+-----------+-----------------
 1  | blabla...
 2  | blabla...
 3  | blabla...
 4  | blabla...
 5  | blabla...


und bei comments:
Code:
id  | article_id | weitere spalten
----+------------+-----------------
 1  | 1
 2  | 1
 3  | 1
 4  | 2
 5  | 3

_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 11.11.2008, 20:20    Titel: Antworten mit Zitat

Die Tabelle sieht genauso aus wie ich sie mir vorgestellt hab.
id als primary key und article_id als foreign key.
da musst du halt wen Fragen der Ahnung hat von sql happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 15.11.2008, 17:49    Titel: Antworten mit Zitat

ou... damit hatte ich im informatik unterricht mal ein problem xD
die lösung war, dass COUNT und select bla.* sich nicht vertragen
bei mir hat es geholfen, nur die gewünschten spalten hinzuschreiben, ohne sternchen


Code:

SELECT articles.name, COUNT(comments.id)
FROM articles,comments
WHERE articles.id==(oder nur =, kA) comments.article_id
GROUP BY articles.id

sollte gehen... ist aber auch schon ne zeit lang her als wir das gemacht haben...
hoffe das hilft dir
_________________
MFG
Flo

Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.

zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 15.11.2008, 18:05    Titel: Antworten mit Zitat

das macht keinen unterschied. was du vlt in erinnerung hattest, ist, dass COUNT, SUM etc. immer ein GROUP BY benötigt, falls es mit anderen daten zusammen ausgegeben werden soll.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 15.11.2008, 18:17    Titel: Antworten mit Zitat

ne, das sowieso
aber ich wusste noch, dass die ganze klasse einschließlich lehrer dran gescheitert ist, ohne * gings dann...
hast du das schonmal bei ner anderen datenbankanwendung versucht? bei uns in der schule hat z.B. m$'s programm müll gemacht, allerdings ging da das mit dem *, während open office alles konnte, nur das mitm stern nicht...
vlt ist das mit versch, sqlversionen auch so?
_________________
MFG
Flo

Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.

zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 15.11.2008, 21:36    Titel: Antworten mit Zitat

warum sollte ich es in einer anderen anwendung probieren, wenn es mysql sein muss? Zunge rausstrecken
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz