php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.04.2005, 15:12  
Erfahrener Benutzer
 
Registriert seit: 30.06.2004
Beiträge: 619
tapferesschneiderlein
Standard mehrere COUNT() auf selbe Tabelle und »can't reopen table«

Hallo,

ich möchte mehrere COUNT() in einem Statement abfragen.

Problem 1:
MySQL zählt anders als ich denke
Ich möchte wissen, wie oft die Werte 10, 20, 30 oder 40 jeweils bei alpha, beta und gamma vorkommen.

Problem 2:
Verwende ich CREATE TEMPORARY TABLE, kommt die Fehlermeldung #1137 - Can't reopen table: 't2_10'

Code:
/*
4.1.10-nt

table_1
+----+-------+
| id | name  |
+----+-------+
|  1 | alpha |
|  2 | beta  |
|  3 | gamma |
+----+-------+

table_2
+----+------+
| id | wert |
+----+------+
|  1 |   10 |
|  1 |   10 |
|  1 |   30 |
|  1 |   40 |
|  2 |   10 |
|  2 |   10 |
|  2 |   10 |
|  2 |   10 |
|  3 |   20 |
|  3 |   30 |
|  3 |   30 |
|  3 |   40 |
+----+------+
*/

CREATE 
#TEMPORARY 
TABLE table_1 (
    id INT, 
    name CHAR(5)
);

INSERT INTO table_1 
VALUES(1, "alpha"), 
    (2, "beta"), 
    (3, "gamma");

CREATE 
#TEMPORARY 
TABLE table_2 (
    id INT, 
    wert INT
);

INSERT INTO table_2 
VALUES(1,10),
    (1, 10),
    (1, 30),
    (1, 40),
    (2, 10),
    (2, 10),
    (2, 10),
    (2, 10),
    (3, 20),
    (3, 30),
    (3, 30),
    (3, 40);


SELECT 
    t1.id,
    t1.name,
    COUNT( t2_10.id ) AS count_10,
    COUNT( t2_20.id ) AS count_20,
    COUNT( t2_30.id ) AS count_30,
    COUNT( t2_40.id ) AS count_40
FROM table_1 t1
LEFT JOIN table_2 t2_10
    ON t2_10.id = t1.id
    AND t2_10.wert = 10
LEFT JOIN table_2 t2_20
    ON t2_20.id = t1.id
    AND t2_20.wert = 20
LEFT JOIN table_2 t2_30
    ON t2_30.id = t1.id
    AND t2_30.wert = 30
LEFT JOIN table_2 t2_40
    ON t2_40.id = t1.id
    AND t2_40.wert = 40

GROUP BY t1.id;

Was mache ich falsch? (Oder ist einfach nur Freitag?)
tapferesschneiderlein ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 01.04.2005, 15:49  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Ähm, wozu die temp. Tabellen?
PHP-Code:
SELECT a.nameb.wertCOUNT(b.wertanzahl
FROM table_1 a
table_2 b
WHERE a
.id b.id
GROUP BY a
.nameb.wert 
DiBo33 ist offline   Mit Zitat antworten
Alt 02.04.2005, 11:09  
Erfahrener Benutzer
 
Registriert seit: 30.06.2004
Beiträge: 619
tapferesschneiderlein
Standard

Na ja, das ist klar, ist aber nicht das, was ich eigentlich brauche: Ich möchte als Ergebnis
Code:
+----+-------+----------+----------+----------+----------+
| id | name  | count_10 | count_20 | count_30 | count_40 |
+----+-------+----------+----------+----------+----------+
|  1 | alpha |        2 |        0 |        1 |        1 |
|  2 | beta  |        4 |        0 |        0 |        0 |
|  3 | gamma |        0 |        1 |        2 |        1 |
+----+-------+----------+----------+----------+----------+
Außerdem habe ich mein Beispiel etwas zu einfach gestaltet. Ich brauche außerdem nämlich noch zusammengfaßte Werte. Analog meiner ersten (nicht funktionierenden) Abfrage sähe das so aus:

Code:
SELECT
    t1.id,
    t1.name,
    COUNT( t2_10.id ) AS count_10,
    COUNT( t2_20.id ) AS count_20,
    COUNT( t2_30_u_40.id ) AS count_30_u_40
FROM table_1 t1
LEFT JOIN table_2 t2_10
    ON t2_10.id = t1.id
    AND t2_10.wert = 10
LEFT JOIN table_2 t2_20
    ON t2_20.id = t1.id
    AND t2_20.wert = 20
LEFT JOIN table_2 t2_30_u_40
    ON t2_30_u_40.id = t1.id
    AND t2_30_u_40.wert IN (30, 40)] # <------

GROUP BY t1.id;
mit folgendem gewünschten Ergebnis:
Code:
+----+-------+----------+----------+---------------+
| id | name  | count_10 | count_20 | count_30_u_40 |
+----+-------+----------+----------+---------------+
|  1 | alpha |        2 |        0 |             2 |
|  2 | beta  |        4 |        0 |             0 |
|  3 | gamma |        0 |        1 |             3 |
+----+-------+----------+----------+---------------+

Meine GROUP/JOIN-Logik sagt, das müsse gehen. Wie geht's richtig?



Zitat:
Zitat von DiBo33
Ähm, wozu die temp. Tabellen?
Die Werte für diese Abfrage stehen in vorher durch andere Abfragen generierten TEMPORARY TABLES.


Schneiderlein
tapferesschneiderlein ist offline   Mit Zitat antworten
Alt 04.04.2005, 13:51  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Ok, ich denke ich weiss jetzt.
Du willst eine s.g. Kreuztabellenabfrage gestalten

Code:
SELECT
    t2.id,
    t1.name,
    SUM(CASE t2.wert WHEN 10 THEN 1 ELSE 0 END) count_10,
    SUM(CASE t2.wert WHEN 20 THEN 1 ELSE 0 END) count_20,
    SUM(CASE t2.wert WHEN 30 THEN 1 WHEN 40 THEN 1 ELSE 0 END) count_30_u_40
FROM table_1 t1, table_2 t2
WHERE t1.id = t2.id
GROUP BY t2.id
DiBo33 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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Wiederholter statt neuer COUNT bei JOIN Greezoo Datenbanken 5 06.07.2007 14:10
problem beim mehrfachen joinen einer tabelle und count() PHS Datenbanken 3 03.08.2006 16:49
Zeilenanzahl einer tabelle mit WHERE aber ohne schleife? sovereign Datenbanken 13 17.04.2006 20:34
[Erledigt] Problem mit dem Füllen einer Tabelle über Formular PHP Tipps 2006 18 10.01.2006 12:51
[Erledigt] Problem mit Anzeige einer Tabelle mit dem Firefox? HTML, Usability und Barrierefreiheit 8 28.11.2005 15:08
Tabelle aktualisieren Datenbanken 3 23.11.2005 09:54
Problem mit mySQL Datenbanken 7 27.09.2005 12:06
mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
tabelle in tabelle ohne aussenrand noskule HTML, Usability und Barrierefreiheit 6 25.08.2005 14:17
Mysql Abfrage über 3 Tabellen in Verbidung mit COUNT() Datenbanken 8 29.06.2005 04:15
Select und Count auf eine Tabelle db Datenbanken 6 23.06.2005 16:33
[Erledigt] Tabelle in Tabelle ausrichten HTML, Usability und Barrierefreiheit 7 03.01.2005 14:32
Sortieren anhand einer zweiten Tabelle PHP Tipps 2004 6 20.09.2004 09:03
[Erledigt] HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
can\'t reopen table, mysql can\'t reopen table, mysql mehrere counts, mysql mehrere count, can\'t reopen table: \'t1\', selbe can, count name die auch in eine andere tabelle sind, cant reopen table, mehrere count, can\'t reopen table schleife, verschiedene counts in einem statement, mysql mehrere count abfragen, \can\'t reopen table mysql\, mysql mehrere count eine abfrage, #1137 - can\'t reopen table, cant reopen table mysql, error : can\'t reopen table:, mysql zwei counts gleiche tabelle, php count, mysql temporary table columns doesn\'t match

Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34 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.