dead.line
2009-02-21, 21:30:52
Moin,
Ich hab eine MySQL Tabelle mit 6 Feldern:
id | initial | category | name | info | visible
- id: ist der primary key und auto_increment
- initial: Hält einfach nur einen Buchstaben (für Sortierung und weil ich es bei einer anderen ausgabe auch noch brauch)
- category: Hält einen String wie z.b. "chemicals" oder "food" (Hab insgesamt 6 Kategorien)
-name: Ist letztendlich der Name des Produktes, danach möchte ich auch mit "LIKE '%$string%'" suchen.
- info: hält einen Link oder ist leer.
- visible: Boolean, ob der Eintrag angezeigt werden soll oder nicht.
Jetzt möchte ich das wenn man nach etwas sucht und man Treffer in mehreren Kategorien hat, das die schön formatiert ausgegeben werden.
zum beispiel so:
Chemicals:
- Produkt 1
- Produkt 2
- Produkt 3
- Produkt 4
- Produkt 5
Food:
- Produkt 1
- Produkt 2
- Produkt 3
Das schwierige ist jetzt:
Für eine Kategorie (z.b. Chemicals) soll einmal über die Treffer eine Überschrift rübergeschrieben werden. Sobald die Treffer eine andere Kategorie aufweisen, soll eine neue Überschrift mit der neuen Kategorie kommen und dann die entsprechenden Ergebnisse.
Dabei muss vor jedem Treffer geprüft werden ob "visible=false" oder "true" ist. Entsprechend darf der Treffer dann nicht mitgezählt und ausgeben werden.
Sollte es in einer Kategorie nur 1 oder 2 Treffer geben die BEIDE auf "visible=false" gesetzt sind, darf natürlich nicht die Überschrift mitausgegeben werden.
Kann ich das irgendwie in einer Schleife abarbeiten lassen?
Ich hab bis jetzt das hier. Und das dann für jede kleine Kategorie, was natürlich sehr nervig ist
function products_search($searstring) {
$overallquery = mysql_query("SELECT * FROM products WHERE name LIKE '%{$searstring}%' ORDER BY category, initial, name ASC");
$totaltreffer = mysql_num_rows($overallquery);
// Wurde überhaupt was gefunden?
if ($totaltreffer > 1){
echo '<p>Search Results for "'.$searstring.'" returned '.$totaltreffer.' hits.</p>';
// Chemicals Suche
$query = mysql_query("SELECT * FROM products WHERE name LIKE '%{$searstring}%' AND category='chemicals' ORDER BY initial, name ASC");
$treffer = mysql_num_rows($query);
// Alles mit mehr als einem Treffer
if ($treffer > 1) {
// echo '<p>Search Results for "'.$searstring.'" returned '.$treffer.' hits.</p>';
echo '<h2>Chemicals</h2>';
echo '<ul>';
while ($row = mysql_fetch_array($query)) {
// Visible Flag Check
if ($row['visible']){
echo '<li>';
echo $row['name'];
// Checkt ob für den Eintrag eine Info hinterlegt wurde.Wenn ja, dann wirds gleich in einen Link gegeben. Der Link sollte
// immer nach folgendem Muster angelegt werden: "index.php?id=X"
// Wobei X natürlich durch die entsprechende id ersetzt werden muss.
if(!empty($row['info'])) {
echo ' <a href='.$row['info'].' title="Click here for more Information">Information</a>';
}
echo '</li>';
}
}
echo '</ul>';
}
// Nur bei einem Treffer
if ($treffer == 1) {
while ($row = mysql_fetch_array($query)) {
// Visible Flag Check
if ($row['visible']){
// echo '<p>Search Results for "'.$searstring.'" returned '.$treffer.' hits.</p>';
echo '<h2>Chemicals</h2>';
echo '<ul>';
echo '<li>';
echo $row['name'];
// Checkt ob für den Eintrag eine Info hinterlegt wurde.Wenn ja, dann wirds gleich in einen Link gegeben. Der Link sollte
// immer nach folgendem Muster angelegt werden: "index.php?id=X"
// Wobei X natürlich durch die entsprechende id ersetzt werden muss.
if(!empty($row['info'])) {
echo ' <a href='.$row['info'].' title="Click here for more Information">Information</a>';
}
echo '</li></ul>';
}else{
echo '<p>Sorry, no matches found. Please respecify your inquiry.</p>';
}
}
}
Das Problem hierbei ist: Sobald ich in einer Kategorie 2 Treffer hab die beide auf "visible=false" stehen, wird die Überschrift ausgegeben aber die Treffer nicht...
Hat jemand ne Idee wie ich das besser umsetzten kann? Hoffe es ist klar geworden was ich überhaupt versuche umzusetzen....
Bin noch ein Anfänger in Sachen PHP und MySQL.
Ich hab eine MySQL Tabelle mit 6 Feldern:
id | initial | category | name | info | visible
- id: ist der primary key und auto_increment
- initial: Hält einfach nur einen Buchstaben (für Sortierung und weil ich es bei einer anderen ausgabe auch noch brauch)
- category: Hält einen String wie z.b. "chemicals" oder "food" (Hab insgesamt 6 Kategorien)
-name: Ist letztendlich der Name des Produktes, danach möchte ich auch mit "LIKE '%$string%'" suchen.
- info: hält einen Link oder ist leer.
- visible: Boolean, ob der Eintrag angezeigt werden soll oder nicht.
Jetzt möchte ich das wenn man nach etwas sucht und man Treffer in mehreren Kategorien hat, das die schön formatiert ausgegeben werden.
zum beispiel so:
Chemicals:
- Produkt 1
- Produkt 2
- Produkt 3
- Produkt 4
- Produkt 5
Food:
- Produkt 1
- Produkt 2
- Produkt 3
Das schwierige ist jetzt:
Für eine Kategorie (z.b. Chemicals) soll einmal über die Treffer eine Überschrift rübergeschrieben werden. Sobald die Treffer eine andere Kategorie aufweisen, soll eine neue Überschrift mit der neuen Kategorie kommen und dann die entsprechenden Ergebnisse.
Dabei muss vor jedem Treffer geprüft werden ob "visible=false" oder "true" ist. Entsprechend darf der Treffer dann nicht mitgezählt und ausgeben werden.
Sollte es in einer Kategorie nur 1 oder 2 Treffer geben die BEIDE auf "visible=false" gesetzt sind, darf natürlich nicht die Überschrift mitausgegeben werden.
Kann ich das irgendwie in einer Schleife abarbeiten lassen?
Ich hab bis jetzt das hier. Und das dann für jede kleine Kategorie, was natürlich sehr nervig ist
function products_search($searstring) {
$overallquery = mysql_query("SELECT * FROM products WHERE name LIKE '%{$searstring}%' ORDER BY category, initial, name ASC");
$totaltreffer = mysql_num_rows($overallquery);
// Wurde überhaupt was gefunden?
if ($totaltreffer > 1){
echo '<p>Search Results for "'.$searstring.'" returned '.$totaltreffer.' hits.</p>';
// Chemicals Suche
$query = mysql_query("SELECT * FROM products WHERE name LIKE '%{$searstring}%' AND category='chemicals' ORDER BY initial, name ASC");
$treffer = mysql_num_rows($query);
// Alles mit mehr als einem Treffer
if ($treffer > 1) {
// echo '<p>Search Results for "'.$searstring.'" returned '.$treffer.' hits.</p>';
echo '<h2>Chemicals</h2>';
echo '<ul>';
while ($row = mysql_fetch_array($query)) {
// Visible Flag Check
if ($row['visible']){
echo '<li>';
echo $row['name'];
// Checkt ob für den Eintrag eine Info hinterlegt wurde.Wenn ja, dann wirds gleich in einen Link gegeben. Der Link sollte
// immer nach folgendem Muster angelegt werden: "index.php?id=X"
// Wobei X natürlich durch die entsprechende id ersetzt werden muss.
if(!empty($row['info'])) {
echo ' <a href='.$row['info'].' title="Click here for more Information">Information</a>';
}
echo '</li>';
}
}
echo '</ul>';
}
// Nur bei einem Treffer
if ($treffer == 1) {
while ($row = mysql_fetch_array($query)) {
// Visible Flag Check
if ($row['visible']){
// echo '<p>Search Results for "'.$searstring.'" returned '.$treffer.' hits.</p>';
echo '<h2>Chemicals</h2>';
echo '<ul>';
echo '<li>';
echo $row['name'];
// Checkt ob für den Eintrag eine Info hinterlegt wurde.Wenn ja, dann wirds gleich in einen Link gegeben. Der Link sollte
// immer nach folgendem Muster angelegt werden: "index.php?id=X"
// Wobei X natürlich durch die entsprechende id ersetzt werden muss.
if(!empty($row['info'])) {
echo ' <a href='.$row['info'].' title="Click here for more Information">Information</a>';
}
echo '</li></ul>';
}else{
echo '<p>Sorry, no matches found. Please respecify your inquiry.</p>';
}
}
}
Das Problem hierbei ist: Sobald ich in einer Kategorie 2 Treffer hab die beide auf "visible=false" stehen, wird die Überschrift ausgegeben aber die Treffer nicht...
Hat jemand ne Idee wie ich das besser umsetzten kann? Hoffe es ist klar geworden was ich überhaupt versuche umzusetzen....
Bin noch ein Anfänger in Sachen PHP und MySQL.