Query: Daten aus zwei Tabellen

thefaxx

Mitglied
Hallo,

ich versuche mit einem Query Daten aus zwei Tabellen zu beziehen.

Tabelle 1 enthält Projekte

Tabelle 2 enthält Links. Jeder Eintrag hat eine pid mit der Projekt-ID.

Ich möchte also alle Projekte in einem Query laden und aus Tabelle 2 die Anzahl der Links beziehen.
Wie lässt sich das realisieren?
 
Meine Frage kann ich schon selbst beantworten:

Code:
"SELECT p.name,COUNT(b.receiver) AS links FROM projects p,links b WHERE p.id = b.pid GROUP BY name"

Jetzt würde mich interessieren, ob ich hier noch eine Bedingung einfügen kann. Sagen wir ich will nur die Links zählen, die
in der Spalte "aktive" eine 1 stehen haben. Wie könnte man das realisieren?
 
Hallo!
Das schwierigste hast du doch schon, wieso erweiterst du denn deine Bedingung nicht einfach?


Code:
"SELECT p.name,COUNT(b.receiver) AS links FROM projects p,links b WHERE p.id = b.pid  and b.aktive = 1 GROUP BY name"

*viele grüße*
 
Hi,

logisch, macht sinn ^^.

Noch eine Frage:
Sagen wir es gibt 3 Stati.
0 = inaktiv
1 = aktiv
2 = standby

Kann ich in einem Query alle Links mit den entsprechenden drei Stati zählen lassen?
Das Resultat enthält dann also: Name des Projekts, Anzahl inaktive Links, Anzahl aktive Links, Anzahl standby Links
 
Danke. Mit dem Resultat kann ich allerdings noch nicht so gut arbeiten.

Code:
Array
(
    [name] => Projekt1
    [links] => 1
)
Array
(
    [name] => Projekt1
    [links] => 13
)
Array
(
    [name] => Projekt1
    [links] => 2
)

Lässt sich eine Ausgabe wie hier erreichen?

Code:
Array
(
    [name] => Projekt1
    [inaktive] => 2
    [aktiv] => 1
    [standby] => 0
)
 
Ich versteh noch nicht. SInd aktive, inaktive etc. verscheidene Felder oder ist es ein Feld mit verscheidenen Werten?
 
Es ist ein Feld mit verschiedenen Werten.

SQL:
CREATE TABLE IF NOT EXISTS `links` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) NOT NULL,
  `url` varchar(256) NOT NULL DEFAULT '',
  `status` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
Zuletzt bearbeitet:
Eine Kreuztabelle willst ud also haben.

So könnte es gehen.
SQL:
SELECT 
	pid
	SUM(IF(stats = 1, 1, 0)) AS aktive,
	SUM(IF(stats = 2, 1, 0)) AS inaktive,
	SUM(IF(stats = 0, 1, 0)) AS standby
FROM
	links
GROUP BY
	pid
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück