Hallo Forum,
ich versuche mir gerade eine Unterabfrage für meine WHERE Klausel zusammen zu bauen, bin aber anscheinend irgendwie zu doof:
Hier meine Beispiel Abfrage:
Code:
SELECT `tickets`.`TICKET_ID`, `tickets`.`BETREFF`, DATE_FORMAT(`tickets`.`ERSTELLT`, '%Y.%m.%d - %T') AS ERSTELLT, DATE_FORMAT(`tickets`.`FERTIGGESTELLT`, '%Y.%m.%d - %T') AS FERTIGGESTELLT, `tickets`.`LEITER_ID`, `tickets`.`STATUS`, `iplog_kunden`.`NAME`, `iplog_kunden`.`TYP_ID`
FROM (kunden INNER JOIN (iplog_kunden INNER JOIN tickets ON iplog_kunden.IPLOG_KUNDEN_ID = tickets.IPLOG_KUNDEN_ID) ON kunden.KUNDEN_ID = iplog_kunden.KUNDEN_ID) INNER JOIN tickets_kategorie ON tickets.TICKET_ID = tickets_kategorie.TICKET_ID
WHERE (`tickets`.`STATUS` = 'o' OR `tickets`.`STATUS` = 'b')
AND 0 = ANY ( SELECT COUNT(*) AS Anzahl
FROM `tickets_kategorie`
WHERE `tickets_kategorie`.`TICKET_ID` = `tickets`.`TICKET_ID`
AND `tickets_kategorie`.`ZUSTAND` = 'j')
Wie man sieht will ich alle Tickets, die als Anzahl 0 in meiner Unter Abfrage erhalten.
Dazu habe ich mich auf
mysql.com umgesehen. Bin auch der Meinung dass es so funktionieren sollte.. tut es aber nicht, es werden mir immer keine Tickets zurück gegeben.
Vielleicht fragen sich manche warum ich es mir so kompliziert mache...: Der Grund für die Unterabfrage in meiner Abfrage ist, dass ich
1. nicht wisse wie es anders machen soll
2. nicht den ganzen PHP Code umschreiben will
Die Abfrage soll sich eigentlich in einen Gruppenfilter DropDown integriere, in der man wählen kann welche Gruppe das Ticket haben soll. Das Funktioniert soweit ja auch... nur möchte ich es noch erweitern, so dass man sieht welche Tickets noch nicht einer Kategorie zugeordnet wurden.
Dazu habe ich folgendes Kontrukt erstellt:
Code:
// Soll nach bestimmten Kategorien gefiltert werden?
if(isset($_GET['cat']) && $_GET['cat'] != "0" && $_GET['cat'] != "-1")
{
if(isset($_GET['subcat']) && $_GET['subcat'] != "0")
$where .= "AND `tickets_kategorie`.`KATEGORIE_ID` = '".quote_smart($_GET['subcat'])."'\n";
else
$where .= "AND `tickets_kategorie`.`KATEGORIE_ID` = '".quote_smart($_GET['cat'])."'\n";
//$where .= " AND `tickets_kategorie`.`TICKET_ID` = `tickets`.`TICKET_ID`\n";
$where .= "AND `tickets_kategorie`.`ZUSTAND` = 'j'\n";
// Wenn gesetzt, dann die entsprechnede Anzeigen
// Wenn nicht, dann nur die eigenen Anzeigen (die dem Verwalter zugeordnet sind)
}
else if(isset($_GET['cat']) && $_GET['cat'] == "-1")
{
$where .= "AND 0 = ANY ( SELECT COUNT(*) AS Anzahl
FROM `tickets_kategorie`
WHERE `tickets_kategorie`.`TICKET_ID` = `tickets`.`TICKET_ID`
AND `tickets_kategorie`.`ZUSTAND` = 'j')\n";
}
Das $where wird dann nur noch an meine SQL Abfrage angehängt.. Ausserdem kommen noch mehr Filter Kriterien hinzu, was ein umbauen fast unmöglich macht.
Vielleicht hat jemand von euch ne Idee was da falsch ist.
Gruß,
Thomas