Datenbankabfrage vereinfachen

OllyP234

Grünschnabel
Hallo zusammen!

Ich baue seit Wochen eine Komponente für Joomla 1.5. Den Adminbereich habe ich sehr gut hin bekommen.
Jedoch habe ich jetzt Probleme bei einer Abfrage im Frontbereich.

Dieses hier ist meine Abfrage die ich erst einmal zum testen so gemacht habe.
PHP:
$result = mysql_query ( "SELECT id FROM jos_switchbase WHERE ( cat = 'A' OR cat = 'B' OR cat = 'C' ) AND published='1'" );
$c_abc = mysql_num_rows ( $result );

$result = mysql_query ( "SELECT id FROM jos_switchbase WHERE ( cat = 'D' OR cat = 'E' OR cat = 'F' ) AND published='1'" );
$c_def = mysql_num_rows ( $result );

$result = mysql_query ( "SELECT id FROM jos_switchbase WHERE ( cat = 'G' OR cat = 'H' OR cat = 'I' ) AND published='1'" );
$c_ghi = mysql_num_rows ( $result );

$result = mysql_query ( "SELECT id FROM jos_switchbase WHERE ( cat = 'J' OR cat = 'K' OR cat = 'L' ) AND published='1'" );
$c_jkl = mysql_num_rows ( $result );

$result = mysql_query ( "SELECT id FROM jos_switchbase WHERE ( cat = 'M' OR cat = 'N' OR cat = 'O' ) AND published='1'" );
$c_mno = mysql_num_rows ( $result );

$result = mysql_query ( "SELECT id FROM jos_switchbase WHERE ( cat = 'P' OR cat = 'Q' OR cat = 'R' ) AND published='1'" );
$c_pqr = mysql_num_rows ( $result );

$result = mysql_query ( "SELECT id FROM jos_switchbase WHERE ( cat = 'S' OR cat = 'T' OR cat = 'U' ) AND published='1'" );
$c_stu = mysql_num_rows ( $result );

$result = mysql_query ( "SELECT id FROM jos_switchbase WHERE ( cat = 'V' OR cat = 'W' OR cat = 'X' ) AND published='1'" );
$c_vwx = mysql_num_rows ( $result );

$result = mysql_query ( "SELECT id FROM jos_switchbase WHERE ( cat = 'Y' OR cat = 'Z' ) AND published='1'" );
$c_yz = mysql_num_rows ( $result );

Wie man ersehen kann, werden für die einzelnen Abfragen jeweils nur die Anzahl der Datensätze gegeben.
Nun wollte ich dieses vereinfachen, so das ich nur ein Query benutzen kann. Habe mal eine Funktion geschrieben jedoch weiß
ich nicht, wie ich dieses umsetzen soll.

PHP:
function _loadData()
	{
		
		if (empty($this->_data))
		{
			$query = 'SELECT COUNT(id) FROM '.$this->_table_prefix.'switchbase'.
		    ' WHERE ( cat = "M" OR cat = "N" OR cat = "O" ) AND published = 1';
			$this->_db->setQuery($query);
			$this->_data = $this->_db->loadObject();
			return (boolean) $this->_data;
		}
		return true;
	}

Eventuell könnte mir einer von Euch helfen dieses irgendwie zu coden.

Sag schon einmal Danke für Eure Antworten.

Grüße

Olly
 
Hallo Olly,

du könntest folgende Abfrage verwenden:

SQL:
SELECT (CASE WHEN cat IN ('A', 'B', 'C') THEN 'ABC'
             WHEN cat IN ('D', 'E', 'F') THEN 'DEF'
             WHEN cat IN ('G', 'H', 'I') THEN 'GHI'
             WHEN cat IN ('J', 'K', 'L') THEN 'JKL'
             WHEN cat IN ('M', 'N', 'O') THEN 'MNO'
             WHEN cat IN ('P', 'Q', 'R') THEN 'PQR'
             WHEN cat IN ('S', 'T', 'U') THEN 'STU'
             WHEN cat IN ('V', 'W', 'X') THEN 'VWX'
             WHEN cat IN ('Y', 'Z')      THEN 'YZ'
             ELSE '*'
        END) AS catgroup,
        COUNT(*) AS c
FROM jos_switchbase
WHERE published = 1
GROUP BY catgroup

Grüße,
Matthias
 
Moin,

noch nen Vorschlag :)

SQL:
SELECT count(*) AS rows ,
       ELT( CEIL( INSTR( '#ABC#DEF#GHI#JKL#MNO#PQR#STU#VWX#YZ', cat ) /4 ) , 
            'ABC', 
            'DEF', 
            'GHI', 
            'JKL', 
            'MNO', 
            'PQR', 
            'STU', 
            'VWX', 
            'YZ' ) AS catgroup
        FROM `jos_switchbase`
          WHERE published =1
            GROUP BY catgroup
 
Hallo zusammen,
ein Dank erstmal an Sven Mintel und Matthias Reitinger.
Sorry das ich mich jetzt erst melde, ich hatte einen Unfall und lag über 14 Wochen im Krankenhaus.

Ich glaube ich habe mich nicht ganz so gut ausgedrückt, was ich eigentlich haben möchte.
Wie oben im ersten Beitrag steht habe ich eine mehrfache Abfrage. Dieses wollte ich
umgehen mit einer Abfrage.

Aussehen sollte es ungefähr so:

"LINK A - B - C" Bisher gibt es 12 Einträge.

"LINK D - E - F" Bisher gibt es 26 Einträge.

Ausgabe bis

"LINK Y - Z " Bisher gibt es 16 Einträge.


Es sollte mir nur den Wert bei "Bisher gibt es 16 Einträge" ausgeben.

Die Frage ist ob es mit nur einer Abfrage geht oder muss ich für jeden Bereich eine machen?

Danke schon mal im voraus.

Grüße

Olly
 
Oje, dann wünsche ich gute Besserung :(


Diesen Wert(16) findest du in den Ergebnissen.

Bei mir heisst er rows, bei Matthias c
 

Neue Beiträge

Zurück