2 Abfragen verbinden

Alice

Erfahrenes Mitglied
Hallo. :)

Lassen sich folgende zwei abfragen zu einer verbinden um "Ressourcen" zu sparen?

Zähle alle User-ID von der Tabelle User
SQL:
SELECT COUNT(userid) AS total FROM user

Zähle alle User-ID von der Tabelle User die seit einer bestimmten Zeit registriert sind
SQL:
SELECT COUNT(userid) AS heute FROM user WHERE reg_date >= $fix_unix_stamp
 
Annahme. Es geht um MySQL.

Der Vergleich >= gibt 0 (False) oder 1 (True) Zurück. Zähle sie alle zusammen und du hast die Anzahl Treffer.
SQL:
SELECT
    COUNT(userid) AS total,
    SUM(reg_date >= {$fix_unix_stamp}) AS heute
FROM user
 
Ich bräuchte noch ein bisschen Unterstützung.

Zähle als User-ID (als Treffer) die der User-Gruppe 6 angehören als Total und das selbe die seit Timestamp-Heute registriert sind als heute.
 
Klingt von der Beschreibung nach Hausaufgaben. Mach mal ein Vorschlag. Bring mal eine Idee. Dann helfen wir weiter. Es ist nur ein erweitern von dem was wir bereits haben.
Alice, du bist schon lange genug dabei um diese Aufgabe zu lösen. Meiner Meinung nach bist du nur zu faul dazu.

Wie gesagt, der erste Versuch muss von dir kommen
 
Das wäre nicht das Problem. Nur Peinlich. :D

SQL:
SELECT
    COUNT(userid) AS total WHERE usergroupid = 6,
    SUM(reg_date >= {$fix_unix_stamp}) AS heute
FROM USER

SQL:
SELECT
    COUNT(userid) AS total,
    SUM(reg_date >= {$fix_unix_stamp}) AS heute
    WHERE usergroupid = 6
FROM USER

Beides verursacht eine ungültige Abfrage..........
 
Wo gehört ein WHERE in einem SQL hin? Es gibt nur einen Platz für ein WHERE. Ansonsten ist es ein CASE WHEN.

Aber laut Text gilt meiner Meinung nach der Filter eh für beide Werte. Also, brav nach der immer gültigen Reihenfolge die sich nicht einfach so verschachteln lässt.

  1. SELECT DISTINCT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY
 
Habe es jetzt mal so gemacht.

SQL:
SELECT
  COUNT(userid) AS total,
  SUM(IF(usergroupid = 2, 1, 0) AND IF(joindate > $heute, 1, 0)) AS heute
FROM user

SQL:
SELECT COUNT(userid) AS total,
  COUNT(IF(usergroupid = 2,1,NULL) AND IF(joindate > $heute,1,NULL)) AS heute
FROM user

Was wäre denn die bessere Wahl?
 
Zuletzt bearbeitet:
Zurück