Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 10.11.2008, 22:18 Titel: Kleines SQL-Problemchen :D |
|
|
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!  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Heizi

Anmeldungsdatum: 19.01.2005 Beiträge: 309
|
Verfasst am: 11.11.2008, 18:00 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.11.2008, 18:48 Titel: |
|
|
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 |
|
 |
Heizi

Anmeldungsdatum: 19.01.2005 Beiträge: 309
|
Verfasst am: 11.11.2008, 18:56 Titel: |
|
|
was genau funktioniert denn nicht????
haste dei Statements mal einzeln ausprobiert???
was für Fehlermeldungen werden angezeigt?? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.11.2008, 19:06 Titel: |
|
|
ist immer irgendwo ein syntax-fehler.
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 |
|
 |
Heizi

Anmeldungsdatum: 19.01.2005 Beiträge: 309
|
Verfasst am: 11.11.2008, 19:18 Titel: |
|
|
Na dann, kann ich dir auch nicht helfen
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.11.2008, 19:31 Titel: |
|
|
GROUP by soll nicht mit * funktionieren? wäre mir fremd.
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 |
|
 |
Heizi

Anmeldungsdatum: 19.01.2005 Beiträge: 309
|
Verfasst am: 11.11.2008, 19:42 Titel: |
|
|
nein das geht nicht, zumindest nicht mit dem SQL das wir bei uns im Geschäft verwenden
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.11.2008, 19:45 Titel: |
|
|
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 |
|
 |
Heizi

Anmeldungsdatum: 19.01.2005 Beiträge: 309
|
Verfasst am: 11.11.2008, 19:49 Titel: |
|
|
dann musst du die Namen der Tabellen davorschreiben.
articles.id=comments.article_id |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.11.2008, 19:54 Titel: |
|
|
ach nee, doof bin ich net 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 |
|
 |
Heizi

Anmeldungsdatum: 19.01.2005 Beiträge: 309
|
Verfasst am: 11.11.2008, 19:58 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.11.2008, 20:05 Titel: |
|
|
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 |
|
 |
Heizi

Anmeldungsdatum: 19.01.2005 Beiträge: 309
|
Verfasst am: 11.11.2008, 20:20 Titel: |
|
|
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  |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 15.11.2008, 17:49 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.11.2008, 18:05 Titel: |
|
|
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 |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 15.11.2008, 18:17 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.11.2008, 21:36 Titel: |
|
|
warum sollte ich es in einer anderen anwendung probieren, wenn es mysql sein muss?  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|