Kategorien und Anzahl der Einträge auslesen

Discman

Mitglied
Hallo,

Ich habe ein Formular für eine Suchfunktion in meiner Datenbank erstellt, leider muss ich gleich am Anfang sagen, dass der Inhalt und der Kategoriename in einer Tabelle liegen, was jetzt auch mein Problem ist, nebenbei würde das umschreiben etwas lange dauern (es sind derzeit 2000 Einträge und wachsend). Jetzt wollte ich mal fragen, ob es irgendwie möglich ist ohne X Select Anfragen zu erstellen, den Kategorienamen und die Anzahl der Beiträge auszugeben?

Meine Abfrage sieht so aus:

PHP:
$query = 'SELECT name, postleitzahl, ort, strasse, hausnummer, bundesland, bezirk, branchen FROM firmen WHERE ';
for($a=0; $a<count($searchtext); $a++)
{
$query .= "(name LIKE '%".$searchtext[$a]."%' OR 
            postleitzahl LIKE '%".$searchtext[$a]."%' 
			OR ort LIKE '%".$searchtext[$a]."%'
			OR strasse LIKE '%".$searchtext[$a]."%' 
			OR hausnummer LIKE '%".$searchtext[$a]."%' 
			OR bundesland LIKE '%".$searchtext[$a]."%' 
			OR bezirk LIKE '%".$searchtext[$a]."%'
			OR nachname LIKE '%".$searchtext[$a]."%'
			OR branchen LIKE '%".$searchtext[$a]."%'
			)";
			
if($a<count($searchtext)-1)
{
$query .= ' AND ';
}
}

Jetzt gibt es natürlich wenn ich das Stichwort "auto" nehme jede Menge Einträge und die auch mit unterschiedlichen Kategorien zB 10 Einträge in Autoreifen und 5 in Autoreperatur. Wenn keine Einträge drin sind soll natürlich nichts ausgegeben werden.

Die Ausgabe hätte ich da gerne so:

- branchenname (anzahl der einträge bei dieser branche)
- branchenname 2 (anzahl der einträge bei dieser branche)
etc.

Das einzige was mir im Moment einfällt sind mehrere Select Abfragen mit jeweils einer anderen Branchenbezeichnung. Also einfach mehrere Querys und hinten das hier anhängen:

PHP:
$query .= "AND branchen LIKE '%".$branchenname."%'";

Nur kann das auch wieder zu Fehlern führen, weil dann Branchen wie Straßenmeistereien einfach untergehen.

Gibt es da einen besseren bzw. schnelleren Weg? Bin für jede Hilfe dankbar. :)

mfg

disc
 
Hallo,
also wenn ich dich richtig verstanden habe, dann kannst du dein Vorhaben ganz einfach
mit der GROUP BY klausel lösen, ungefähr so:
PHP:
<?php
    require('connect.php');
    
    $sql = 'SELECT count(*) as anzahl, kategoriename FROM tabelle GROUP BY kategoriename';
    $query = mysql_query($sql) or die(mysql_error());
    
    while ($ds = mysql_fetch_object($query)){
        echo '<pre>'.$ds->anzahl.': '.$ds->kategoriename.'</pre>';
    }
?>

mfg
forsterm
 
Hallo, das mit dem Group By hat jetzt wunderbar geklappt jetzt hätte ich nur noch eine kleine Frage, ich übergebe den Namen von der Kategorie jetzt per Link an die Ausgabe-Seite. In der Ausgabe mache ich dann nochmal die Select Abfrage mit dem Query wie oben. Jetzt meine Frage, wie baue ich die Kategorie/Branche jetzt ein, damit wirklich nur die Einträge angezeigt werden, die in der Kategorie und der Suchanfrage entsprechen?

Also die neue Abfrage der Sucheinträge mit der Gruppierung sieht jetzt so aus:

PHP:
$query = 'SELECT count(*) as anzahl, branchen FROM firmen WHERE ';

for($a=0; $a<count($searchtext); $a++)
{
$query .= "(name LIKE '%".$searchtext[$a]."%' OR 
                 postleitzahl LIKE '%".$searchtext[$a]."%' 
           OR ort LIKE '%".$searchtext[$a]."%'
           OR strasse LIKE '%".$searchtext[$a]."%' 
           OR hausnummer LIKE '%".$searchtext[$a]."%' 
           OR bundesland LIKE '%".$searchtext[$a]."%' 
           OR bezirk LIKE '%".$searchtext[$a]."%'
           OR nachname LIKE '%".$searchtext[$a]."%'
           OR branchen LIKE '%".$searchtext[$a]."%')";
			
if($a<count($searchtext)-1)
{
$query .= ' AND ';
}
}
$query .= "GROUP BY branchen";

Die Gruppierung findet richtig statt und sieht so aus:

"Branchenname (Anzahl der Einträge)"

Jetzt hab ich einen Link hinzugefügt, der die Suchvariable und der Branchenvariable enhält. Damit ich dann auf der nächsten Seite damit arbeiten kann.

PHP:
<a href=\"firmen_suche_ausgabe.php?branchen=".$row->branchen."&searchtext=".$searchtext."\">$row->branchen ($row->anzahl)

Das wird einwandfrei übergeben und jetzt Frage ich in der neuen Datei nocheinmal ab mit der fast gleichen Abfrage wie oben, nur ohne GROUP BY.

PHP:
$query = 'SELECT name, postleitzahl, ort, strasse, hausnummer, bundesland, bezirk, branchen FROM firmen WHERE ';

for($a=0; $a<count($searchtext); $a++)
{
$query .= "(name LIKE '%".$searchtext[$a]."%' OR 
            postleitzahl LIKE '%".$searchtext[$a]."%' 
			OR ort LIKE '%".$searchtext[$a]."%'
			OR strasse LIKE '%".$searchtext[$a]."%' 
			OR hausnummer LIKE '%".$searchtext[$a]."%' 
			OR bundesland LIKE '%".$searchtext[$a]."%' 
			OR bezirk LIKE '%".$searchtext[$a]."%'
			OR nachname LIKE '%".$searchtext[$a]."%'
			OR branchen LIKE '%".$searchtext[$a]."%')";
					
if($a<count($searchtext)-1)
{
$query .= ' AND ';
}
}

Natürlich werden jetzt alle Datensätze ausgegeben und nicht die für die entsprechende Branche. Ich hab versucht die Variable $branchen, welche ich ja übergeben bekomme mit dem Link einzufügen, nur funktioniert das irgendwie nicht ich glaube ich schreibe die entweder an der falschen Stelle hinein, oder mit dem falschen Syntax.

Vielleicht kann mir da wer von euch schnell helfen bitte. :(

Vielen Dank für die ganze Hilfe!

mfg

disc
 
Hallo,
so vielleicht:
PHP:
$query = 'SELECT name, postleitzahl, ort, strasse, hausnummer, bundesland, bezirk, branchen FROM firmen WHERE ';

for($a=0; $a<count($searchtext); $a++)
{
$query .= "(name LIKE '%".$searchtext[$a]."%' OR 
            postleitzahl LIKE '%".$searchtext[$a]."%' 
            OR ort LIKE '%".$searchtext[$a]."%'
            OR strasse LIKE '%".$searchtext[$a]."%' 
            OR hausnummer LIKE '%".$searchtext[$a]."%' 
            OR bundesland LIKE '%".$searchtext[$a]."%' 
            OR bezirk LIKE '%".$searchtext[$a]."%'
            OR nachname LIKE '%".$searchtext[$a]."%'
            AND branchen LIKE '".mysql_real_escape_string($_GET['branchen'])."')";
                    
if($a<count($searchtext)-1)
{
$query .= ' AND ';
}
}

mfg
forsterm
 
Zurück