php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.12.2010, 21:51  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard [Erledigt] COUNT und MAX in 1 SELECT

Hallo!

Ich versuche wieder, 2 SELECTs zusammen zu fassen.

Ausgangsbasis:

Tabelle haupt:
Code:
id name
1  a
2  b
Tabelle sub:
Code:
id hauptId filter wert
1  1       0      110
2  1       1      101
3  1       1      102
4  2       0      200
1. SELECT: Anzahl der sub für haupt.id=1 und sub.filter=1

Code:
SELECT haupt.id, COUNT(sub.id)
   FROM
      haupt
      INNER JOIN sub ON (sub.hauptId = haupt.id AND sub.filter = 1)
   WHERE haupt.id = 1
oder

Code:
SELECT haupt.id, COUNT(sub.id)
   FROM
      haupt
      INNER JOIN sub ON (sub.hauptId = haupt.id)
   WHERE
      haupt.id = 1 AND
      sub.filter = 1
In beiden Fällen liefert COUNT korrekterweise 2.

2. SELECT: Max von sub.wert für haupt.id=1

Code:
SELECT haupt.id, MAX(sub.wert)
   FROM
      haupt
      INNER JOIN sub ON (sub.hauptId = haupt.id)
   WHERE
      haupt.id = 1
Versuch:

Der folgende Befehl funktioniert NICHT:

Code:
SELECT haupt.id, COUNT(sub0.id), MAX(sub1.wert)
   FROM
      haupt
      INNER JOIN sub AS sub0 ON (sub0.hauptId = haupt.id AND sub0.filter = 1)
      INNER JOIN sub AS sub1 ON (sub1.hauptId = haupt.id)
   WHERE haupt.id = 1
COUNT liefert jetzt nicht mehr 2, sondern 6!
Das funktioniert nicht, weil sub0 und sub1 seltsamerweise einen CrossJoin machen.
sub0 arbeitet mit 2 Datensätzen, sub1 mit 3.
2 * 3 = 6
Das sieht man, wenn man macht:

Code:
SELECT haupt.id, sub0.id, sub1.id
   FROM
      haupt
      INNER JOIN sub AS sub0 ON (sub0.hauptId = haupt.id AND sub0.filter = 1)
      INNER JOIN sub AS sub1 ON (sub1.hauptId = haupt.id)
   WHERE haupt.id = 1
Aber wie kann man die SELECTs richtig zusammenfassen?

Dump:

Falls noch wer mit mir herumexperimentieren möchte:

Code:
CREATE TABLE IF NOT EXISTS `haupt` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3 ;
INSERT INTO `haupt` (`id`, `name`) VALUES
(1, 'a'),
(2, 'b');
CREATE TABLE IF NOT EXISTS `sub` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `hauptId` int(11) NOT NULL,
  `filter` int(11) NOT NULL,
  `wert` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=5 ;
INSERT INTO `sub` (`id`, `hauptId`, `filter`, `wert`) VALUES
(1, 1, 0, 110),
(2, 1, 1, 101),
(3, 1, 1, 102),
(4, 2, 0, 200);

Geändert von coola (07.12.2010 um 22:02 Uhr).
coola ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 07.12.2010, 22:08  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Zitat:
Zitat von coola Beitrag anzeigen
Das funktioniert nicht, weil sub0 und sub1 seltsamerweise einen CrossJoin machen.
Ohne Join Bedingung (Beziehung zwischen sub1 und sub2) gibts ein Cross Join... da ist nix seltsam dran.

PHP-Code:
SELECT haupt.idSUM(IF(sub1.filter 110)), MAX(sub1.wert)
   
FROM
      haupt
      INNER JOIN sub 
AS sub1 ON (sub1.hauptId haupt.id)
   
WHERE haupt.id 
erc ist offline   Mit Zitat antworten
Alt 07.12.2010, 22:12  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard

Ich wusste doch, das muss irgendwie gehen!
Mir fehlt nur leider noch die Übung mit MySQL.
DANKE!
coola 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
SELECT DISTINCT und COUNT puwu Datenbanken 16 28.10.2010 17:52
[Erledigt] MySQL: SUM, COUNT, GROUP BY sortieren comlar Datenbanken 3 21.10.2010 00:25
[Erledigt] Intertabellarische Berechnungen, wie? dave303 Datenbanken 13 05.03.2010 11:58
Ausgabe erfolgt nicht Extremefall PHP Tipps 2009 17 17.12.2009 19:51
[Erledigt] SELECT COUNT --2 Werte aus einer Spalte-- euwo Datenbanken 5 12.10.2009 02:30
mehrere select count zusammen fassen reddevil82 PHP Tipps 2009 9 03.05.2009 21:45
select count group by für "Webstatistik" verwenden sauwatz PHP Tipps 2008 6 28.10.2008 15:17
[Erledigt] Kein Ergebnis bei SELECT (MySQL 4.1.9) dr.e. Datenbanken 4 15.06.2008 19:54
SQL - ein select count - wahrscheinlich micbur Datenbanken 4 22.11.2006 23:20
[Erledigt] SELECT mit gleichzeitigem COUNT ??? 18inch Datenbanken 3 05.03.2006 14:51
Kombiniertes Problem mit SELECT und COUNT über 2 Tabellen Datenbanken 6 01.07.2005 14:28
Select und Count auf eine Tabelle db Datenbanken 6 23.06.2005 16:33
Crosstable SELECT und COUNT() fantast Datenbanken 2 27.01.2005 15:35
[Erledigt] 2 mal select 1 form PHP-Fortgeschrittene 1 01.09.2004 20:13
[Erledigt] SELECT COUNT - Probleme beim auswerten. Datenbanken 2 09.08.2004 13:55

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
select max, php select max, http://www.php.de/datenbanken/74828-erledigt-count-und-max-1-select.html, select max count, select count and max, select max(count, select php id auto_increment aus, select where max, sql select max count, inner join sql max wert filtern, select where max(count(*)), max(id) 1 wert null, select count max, php count wird nicht mehr als 1, select max into, count und max, select count where max, max(count(id), select where count = max, mysql inner join where select max

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:07 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