Wertevorkommen innerhalb eines Inhaltstyps zählen - wie?
am 05.05.2011 - 12:30 Uhr in
Hallo liebe Gemeinde,
Ich wühle mich derzeit durch den Dickicht an Tabellen mit den teils wirren Bezeichnungen, um meine SQL Abfragen zu formulieren, allerdings komme ich nicht weiter.
Was hab ich vor?
Ich habe in meinem Inhaltstyp Lexikon gibt es verschiedene Felder wie
- Begründer (über Taxonomie mit Hierarchical select realisiert)
- Herkunft (Taxonomie 2 stufig, mit Kontinent- und korrespondierenden Ländern)
- Waffeneinsatz (wahlweise ohne, optional, mit)
usw...
Jetzt möchte ich einen Block haben, der alle Vorkommen zusammengefasst wie folgt darstellt.
Lexikoninhalte
xxx Einträge im Lexikon (das hab ich schon hinbekommen)
aus xxx Ländern
von xxx Begründern
xxx ohne Waffen
xxx mit Waffen
xxx optionale Waffen
Eigentlich weiß ich zumindest einigermaßen was ich tun muss, nämlich die Referenzen auf die jeweiligen Werte zählen (nicht die definierten Werte an sich zählen).
Allerdings blicke ich beim Blick in die Tabellen nicht durch um die entsprechenden richtigen Tabellen bzw. Variablen anzusprechen.
Meine Zählung der Lexikoneinträge funktioniert erstmal soweit.
So ähnlich müsste ja dann auch die Abfrage für die Anzahl der Vorkommen für die entsprechenden Werte des Inhaltstyps sein.
<?php
print db_result(db_query("SELECT COUNT(nid) FROM {node} WHERE nid > 0 AND status = 1 AND type IN('%s')", implode(',', array('kampfstile')))); ?> Kampfstile gelistet.
Würde mich freuen, wenn mir jemand etwas unter die Arme greifen könnte, SQL is auch noch neu für mich.
Danke schon mal im Voraus.
- Anmelden oder Registrieren um Kommentare zu schreiben
An Deiner Stelle würde ich
am 05.05.2011 - 13:52 Uhr
An Deiner Stelle würde ich mich jetzt mit dem Modul Views befassen:
1. Wirst Du wahrscheinlich 80% Deiner Anforderungen sofort abdecken können
2. Kannst Du Dir den SQL von Views zusammenbauenlassen und ihn woanders weiternutzen
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
Hallo leda, du wirst lachen,
am 06.05.2011 - 09:37 Uhr
Hallo leda,
du wirst lachen, mit Views hab ich schon einiges hier durchexerziert, was man auch an den vielen Fragen meinerseits hier im Forum sehen kann :-)
Aber auf die Idee, sich die SQL Anweisungen von Views zusammenzimmern zu lassen, muss man erstmal kommen.
Das dürfte in der Tat einiges an Sucherei ersparen.
Oft sind die naheliegendsten Lösungen aber im Dickicht der Möglichkeiten schwer zu finden :-)
ma sehn ob ich das hinkrieg...
Ja genau - die Erkenntnis aus
am 06.05.2011 - 10:02 Uhr
Ja genau - die Erkenntnis aus Punkt 2 hat mich auch Nerven gekostet ;-D
Viel Erfolg!
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
Mmmh, ich muss das hier noch
am 10.05.2011 - 10:00 Uhr
Mmmh, ich muss das hier noch mal hochschubsen.
irgendwie krieg ich das nich hin, die Sachen zu zählen.
Views erstellt mir zb. folgende SQL Anweisung
SELECT node_data_field_art_der_kampfkunst.field_art_der_kampfkunst_value AS node_data_field_art_der_kampfkunst_field_art_der_kampfkunst_value,
COUNT(node.nid) AS num_records
FROM node node
LEFT JOIN content_type_kampfstile node_data_field_art_der_kampfkunst ON node.vid = node_data_field_art_der_kampfkunst.vid
WHERE (node.type in ('kampfstile')) AND (node.status <> 0)
GROUP BY node_data_field_art_der_kampfkunst_field_art_der_kampfkunst_value
ORDER BY node_data_field_art_der_kampfkunst_field_art_der_kampfkunst_value ASC
Wirkt doch leicht überfrachtet irgendwie
Die Frage is jetzt, wie bau ich das in ne php Anweisung ein? um zb. die beiden Kampfstiltypen zu zählen?
Generell hast Du mit Deiner
am 10.05.2011 - 10:33 Uhr
Generell hast Du mit Deiner Anforderung mehr als 1 Datensatz als Rückgabe zu erwarten, da muss eine Schleife her:
$query = db_query(db_rewrite_sql("xxx"));
while ($temp = db_fetch_object($query)) {
$kampfstil = $temp->node_data_field_art_der_kampfkunst_field_art_der_kampfkunst_value;
$anzahl = $temp->num_records;
}
an der Stelle mit xxx klebst Du deinen SQL rein. In der Schleife kannst Du dann die gewonnen Werte nutzen, allenfalls wieder in einen anderen array tun, wie auch immer.
Der SQL sieht nur so wirr aus, weil die Aliase so gross sind.
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
Danke erstmal für deine
am 10.05.2011 - 10:47 Uhr
Danke erstmal für deine Idee.
Mmmmh. im Grunde sind es 2 Werte... es gibt 2 fix definierte Auswahlmöglichkeiten für "art_der_kampfkunst".
Diese will ich halt zählen lassen. aber ich Moment stell ich mich echt zu blöd an.
Hallo leda hab es jetzt an
am 10.05.2011 - 12:34 Uhr
Hallo leda
hab es jetzt an sich erstmal hinbekommen. Die Werte werden angezeigt, aber ich hab ein Problem mit der Anzeige.
Hast du vielleicht ne Idee wie ich das mit der Anzeige machen könnte?
Wie kann ich vor den Werten noch die Bezeichnung anzeigen?
Normal steht die ja im $temp Array drin, aber ich krieg die nich angezeigt...
ich hab echt alles probiert aber ich bin grad wie blöd.
Danke für deine Hilfe.
Hmm, steht doch in der
am 10.05.2011 - 14:46 Uhr
Hmm, steht doch in der Schleife: $kampfstil. Diese Variable wird dann halt in der Schleife zweimal abgefüllt, da ja auch 2 Datensätze geholt werden.
Die musst Du dann auf 2 Variablen verteilen.
Kannst Du Dir mit dem Modul Devel mit dsm() die Variablen mal anzeigen lassen - hat der SQL überhaupt einen result?
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
wie gesagt, die Werte (im
am 10.05.2011 - 15:13 Uhr
wie gesagt, die Werte (im ersten durchlauf 5 , beim zweiten ne 2) werden ja korrekt angezeigt. ich bräuchte halt nur noch die bezeichnungen davor.
www.kampfstile.de - rechts oben in dem Bereich, da siehstes wie es derzeit aussieht...
werds mir gleich noch mal zu gemüte führen...
So ich noch mal.ich versteh
am 10.05.2011 - 19:23 Uhr
So ich noch mal.
habs jetzt hinbekommen. mit ner simplen if abfrage
vielleicht nicht elegant, aber es funktioniert...
jetzt kann ich mich daran machen die anderen Detailvariablen auszuwerten.
Danke für deine Hilfe, hat mir sehr weitergeholfen. Wenn ich noch mal Probleme hab, kann ich dich hoffentlich hier weiter mit Fragen löchern?
Also sowieso: im if musst du
am 10.05.2011 - 19:22 Uhr
Also sowieso:
im if musst du 2x== haben, z.B.
if ($kampfstil==1) $art='innere';
auf deiner Site sehe ich dies:
7 Kampfstile gelistet
==================
innere: 5
äußere: 2
Das wäre doch korrekt und sieht ok aus??
Willst Du denn für "innere" und "äussere" was anderes haben?
Ich seh jetzt Deinen Fehler nicht...
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
:-) mich oder jemand anderen
am 10.05.2011 - 19:28 Uhr
:-)
mich oder jemand anderen - gibt viele hilfsbereite Menschen hier!
Viel Erfolg weiterhin!
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
nene so wie s jetzt is, isses
am 10.05.2011 - 19:30 Uhr
nene so wie s jetzt is, isses ok... ich hatte vorher nur das Problem, dass er die Bezeichnung immer mit der letzten (aus dem letzten Schleifendurchlauf) überschrieben hat.
da stand dann
äußere 2
äußere 5
hab dann aber irgendwie das mit der if anweisung drumherumgebastelt und jetzt gehts wie du siehst
ich hoffe das geht jetzt mit den anderen Werten zügiger. muss ja eigentlich nur variablen und sql befehl tauschen...
So ich muss hier nochmal
am 12.05.2011 - 10:00 Uhr
So ich muss hier nochmal nachfragen.
Irgendwie hab ich Probleme die Taxonomiewerte zu zählen.
Ich hab Taxonomien für den Begründer und Herkunft (2 Stufig Kontinent->Land).
die SQL Anweisung sieht wiefolgt aus.
SELECT node_data_field_begruender.field_begruender_value AS node_data_field_begruender_field_begruender_value,
COUNT(node.nid) AS num_records
FROM node node
LEFT JOIN content_type_kampfstile node_data_field_begruender ON node.vid = node_data_field_begruender.vid
WHERE (node.type in ('kampfstile')) AND (node.status <> 0)
GROUP BY node_data_field_begruender_field_begruender_value
ORDER BY node_data_field_begruender_field_begruender_value ASC
Damit müsste ich ja sicherstellen, dass nur referenzierte (also wirklich benutzte) Einträge gezählt werden.
irgendwie komm ich aber nich drauf, wie ich die Gesamtzahl der verwendeten Einträge (nicht die Häufigkeit) rauskrieg.
geht das mit dem SQL Befehl count?
Mach mal ein Beispiel: 100
am 12.05.2011 - 12:34 Uhr
Mach mal ein Beispiel:
100 Leute, 60 aus D, 30 aus A, 10 aus CH, 0 aus F, 0 aus FL, 0 aus I.
Was willst als Resultat haben:
1.
D: 60
A: 30
CH: 10
F: 0
FL: 0
I: 0
oder
2.
D: 60
A: 30
CH: 10
oder ??
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
Hallo leda sorry für meine
am 12.05.2011 - 17:03 Uhr
Hallo leda
sorry für meine späte Rückmeldung, hab die Mail erst jetzt gesehn.
also ich wollte in meiner Übersicht einfach eine Summe aller Länder haben.
Jedes Land einzeln zu addieren und anzuzeigen wird glaub ich zu viel - wir haben schätzungsweise 300 Datensätze...
Eine Summe der Länder würde reichen. also das man dann sowas wie "von x Kontinenten und x Ländern).
Danke schon mal für deine Hilfsbereitschaft.
Damit ist der SQL aus einer
am 12.05.2011 - 21:44 Uhr
Damit ist der SQL aus einer Node-View bereits aus dem Rennen, weil der auch ein Distinct Count immer auf NID-Ebene passiert.
Du solltest zunächst versuchen, die relevanten Daten als View ohne Gruppierung zusammenzustellen, und dann im php den SQL als als Sub-SQL mit einer eigenen Gruppierung zu nutzen.
Das bedingt aber eher bessere SQL-Kenntnisse.
So als outline hiesse das:
sql aus der view: select foo from bar
neuer sql in mit subsql:
select foo, count(*) from
(select foo from bar)
group by foo
Hoffe das hilft.
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
Puh, wie kompliziert is das
am 12.05.2011 - 22:36 Uhr
Puh, wie kompliziert is das denn.
aber müsste es nich reichen in der Schleife einfach ne zweite variable zu nehemn, die das ergebnis der $anzahl variable aufnimmt? nach dem Muster $summe=$summe+$anzahl;
werde das morgen mal ausprobieren.
nur wie ich die auswahl auf die zweite taxonomieebene begrenze, das muss ich ma sehn. schätze mal dass das nach dem einlesen n 2 dimensionales array wird... aber das is nur spekulation.
Du musst erst in der View
am 13.05.2011 - 09:08 Uhr
Du musst erst in der View folgenden Output erzielen, ohne irgendeinen Count:
Node-Id, Kontinent, Land
Damit hast Du den inneren SQL.
Den kannst Du dann im PHP-Teil zählen, gruppieren etc. wie du willst.
lg leda
"Du liebst es, Du brauchst es oder Du gibst es weg"
www.leda.ch
das is agar nich so einfach
am 13.05.2011 - 09:26 Uhr
das is agar nich so einfach :-) ich versuch aber weiter, danke für deine Hinweise.
hab mir überlegt, vielleicht
am 13.05.2011 - 12:10 Uhr
hab mir überlegt, vielleicht ist es einfacher, die Anzahl der Begriffe im entsprechenden Vokabular zu zählen. Aber selbst das krieg ich nich wirklich gebacken.
das müsste ja in jedem fall mit dem count befehl gehen
Rikibu schrieb das müsste ja
am 13.05.2011 - 14:44 Uhr
das müsste ja in jedem fall mit dem count befehl gehen
Oder einfach mit dem Modul Term Node Count :-)
Do it with Drupal.