Suchindex( A - Z) bei MYSQL erstellen...

vranjanac

Grünschnabel
Hallo zusammen,

Ich bin verzweifelt am suchen nach einer Einleitung wie man einen Suchindex auf der Homepage erstellt. Ich will Euch mal kurz erklären was ich will:

- Ich habe einen Bewertungsscript der mit MYSQL lauft. Die datenbank hat den namen "smos" drin sind 5 Tabelen(smos_items, smos_reviews, smos_settings, smos_users, smos_wordfilter)

In smos_items sind folgende felder/spalten: item_id, item_name, item_ort, item_tel, item_webseite, reviews, avg_rating, avg_total, description)

In diesem Script ist per drag_drop die suche nach (alpabetisch, ort, anzahl der bewertungen, bewertungen) intergriert.

Nun möchten ich einen buschtaben Verzeichniss erstellen ( von A bis Z) der sobald ich auf A klicken mit die items anzeigt die sich im A(ort) befinden...

Ich habe keine Ahnung wie man so was macht?

Kann mir jemand helfen?

Besten Dank im voraus

Saludos
vranjanac
 
Was willst Du?
Irgendwie habe ich das nicht ganz verstanden!
Willst Du, wenn jemand auf A drückt, alle Ort haben, die mit A anfangen?

redlama
 
Hallo,

Nach Buchstaben machst Du die Abfrage am Besten so:

Code:
SELECT item_ort FROM smos_item WHERE item_ort LIKE 'A%' ORDER BY item_ort

Das liefert Dir alle Orte, die mit dem Buchstaben 'A' beginnen.
Groß- & Kleinschreibung spielt bei LIKE keine Rolle.

Liebe Grüße

Alex
 
Zuletzt bearbeitet:
Hi Redlama, Hi Alex,

Danke für Eure Kommentare.

Redlama: genau das will ich!

Alex: Ich habe ausprobiert...

Also...ich habe einen index.php file und eine main.htm file... Die main.htm ist ein template(bezieht daten von index.php und sieht so aus:
HTML:
Review Engine<br>
&nbsp;</b></p>
	 <p align="center">{sort_drop_down}</p>
	 </td>
	</tr>
	<tr>
	 <td width="589">
	 <br>
	 {start_loop_item_list}<div align="center">
		<center>
		<table style="BORDER-COLLAPSE: collapse" borderColor="#C0C0C0" cellPadding="3" border="1" width="85%" cellspacing="3">
		 <tr>
			<td vAlign="top" bgcolor="#EFEFEF">
			<table border="0" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111">
			 <tr>
				<td width="473"><font face="Arial" size="2"><b>
				<font color="#800080">{item_name}</font><br>
				</b></font><font face="Arial">{item_description}</font></td>
				<td width="139" valign="middle" bgcolor="#EFEFEF">
				<font face="Arial" size="2"><b>{rating}<br>
				</b></font><if name="no_items"><font size="1">{read_reviews}<br>
				{post_reviews}</font></if></td>
			 </tr>
			</table>
			</td>
		 </tr>
		</table>
		</center>
	 </div>
	 {end_loop_item_list}</td>
	</tr>
	<tr>
	 <td width="589">
	 <p align="center"><br>
	 {paging}</p>
	 <p align="center"><font size="1">{copyright}</font></p>

Die index.php wird sieht so aus:

PHP:
<?php
/////////////////////////////////
// Includes
/////////////////////////////////
define('root_path', '');
require ("inc/global.php");
////////////////////////////////////////////////
// Load Template
////////////////////////////////////////////////
$tpl = new template;
$tpl->load_file('main', "$skin_path/main.htm");
$que = "SELECT item_ort FROM instar_items WHERE item_ort LIKE 'A%' ORDER BY item_ort";
////////////////////////////////////////////////
// View Items
////////////////////////////////////////////////
if (!$offset) $offset=0;
// Paging
$que = "SELECT count(*) AS number FROM ".$tableprefix."_items";
$count_result = $site_db->query($que);
while ($count = $site_db->fetch_array($count_result))
	$total_entries = $count["number"];
if ($total_entries > 0) {
		 $pages = $total_entries / $items_per_page;
			 if ($pages < 1) {
				 $pages = 1;
			 }
			 if ($pages / (int) $pages <> 1) {
				 $pages = (int) $pages + 1;
			 }
			 else {
				 $pages = $pages;
			 }
		 if ($total_entries>$items_per_page)
						{
			 if (($offset > $total_entries) or (!is_numeric($offset)))
						$offset = 0;
			 // current page number
			 $pagenow = ($offset/$items_per_page + 1);
			 $paging = $lang['page_display']." " . $pagenow . "/" . $pages;
			 // next/preview links
			 $next = $offset + $items_per_page;
			 $previous = $offset - $items_per_page;
			 if ($pages <> 1) {
				 $paging .= " || ";
				 if ($previous < 0) {
					$paging .= "<a href=$PHP_SELF?id=$id&offset=" . $next . ">";
					$paging .= "<acronym title='".$lang['page_next']." " . $items_per_page . "'>".$lang['page_next']."</acronym></a>";
				 }
				 elseif ($next >= $total_entries) {
					$paging .= "<a href=$PHP_SELF?id=$id&offset=" . $previous . ">";
					$paging .= "<acronym title='".$lang['page_prev']." " . $items_per_page . "'>".$lang['page_prev']."</acronym></a>";
				 }
				 else {
				 $paging .= "<a href=$PHP_SELF?id=$id&offset=" . $previous . ">";
				 $paging .= "<acronym title='".$lang['page_prev']." " . $items_per_page . "'>".$lang['page_prev']."</acronym></a>";
				 $paging .= " | ";
				 $paging .= "<a href=$PHP_SELF?id=$id&offset=" . $next . ">";
				 $paging .= "<acronym title='".$lang['page_next']." " . $items_per_page . "'>".$lang['page_next']."</acronym></a>";
				 }
			 }
			 // links to all pages
			 if ($pages>1)
											 {
			 $paging .= "<br>".$lang['page_goto'];
			 $i = 0;
			 while ($i < $pages) {
					$ri = $i + 1;
					$showpage = $i * $items_per_page;
					if ($ri == $pagenow)
					 $paging .= $ri . " ";
					else
					 $paging .= "<a href=$PHP_SELF?id=$id&offset=" . $showpage . ">" . $ri . "</a> ";
					$i++;
																		}
							 }
			}
			 if ($sort_order == "number")
$order_by = "reviews DESC";
		 elseif ($sort_order == "rating")
						 $order_by = "avg_rating/avg_total DESC";
	 elseif ($sort_order == "ort")
	 $order_by = "item_ort";
			 else
				 $order_by = "item_name";
			$que = "SELECT * FROM ".$tableprefix."_items ORDER BY $order_by LIMIT $offset, $items_per_page";
			$result = $site_db->query($que);
			$item_list = array();
			$record = 0;
			while ($row = $site_db->fetch_array($result)){
$sql = "SELECT reviews, avg_rating, avg_total FROM ".$tableprefix."_items WHERE item_id = $row[item_id]";
				$rev_result = $site_db->query($sql);
$rev_row = $site_db->fetch_array($rev_result);
 
		 $avg_total = $rev_row[avg_total];
$avg_rating = $rev_row[avg_rating];
$num_reviews = $rev_row[reviews];
 
		 if ($num_reviews)
$item_list[$record][read_reviews]="<a href=\"view.php?id=$row[item_id]\">$num_reviews $lang[reviews]</a>";
				else
$item_list[$record][read_reviews]=$lang['no_reviews'];
				$item_list[$record][item_name] = $row[item_name];
	$item_list[$record][item_ort] = $row[item_ort];
	$item_list[$record][item_tel] = $row[item_tel];
	$item_list[$record][item_webseite] = $row[item_webseite];
				$item_list[$record][reviews] = $row[reviews];
		 $item_list[$record][item_description] = $row['description'];
				if (!$avg_total)
$rat=0;
else
$rat = round ($avg_rating/$avg_total,2);
				 if ($rat==0) {$avg_rating = "<img border=\"0\" alt=\"noch nicht bewertet\" src=\"$skin_path/images/b0.gif\">";}
					elseif ($rat<=1) {$avg_rating = "<img border=\"0\" alt=\"$lang[avg_rating] $rat/5\" src=\"$skin_path/images/b1.gif\">";}
					elseif ($rat<=2) {$avg_rating = "<img border=\"0\" alt=\"$lang[avg_rating] $rat/5\" src=\"$skin_path/images/b2.gif\">";}
					elseif ($rat<=3) {$avg_rating = "<img border=\"0\" alt=\"$lang[avg_rating] $rat/5\" src=\"$skin_path/images/b3.gif\">";}
					elseif ($rat<=4) {$avg_rating = "<img border=\"0\" alt=\"$lang[avg_rating] $rat/5\" src=\"$skin_path/images/b4.gif\">";}
					elseif ($rat<=5) {$avg_rating = "<img border=\"0\" alt=\"$lang[avg_rating] $rat/5\" src=\"$skin_path/images/b5.gif\">";}
				$item_list[$record][rating] = $avg_rating;
			 $item_list[$record][post_reviews]="<a href=\"post.php?id=$row[item_id]\">$lang[post]</a>";
			 $record++;
				}
		 if ($total_entries > 1){
$sort_drop_down = "<form method=\"POST\" action=\"$PHP_SELF?id=$id&offset=$offset\">
					".$lang['sort_text']."
					<select name=\"sort_order\">
			 <option>".$lang['select_text']."</option>
			 <option value=\"alphabetical\">".$lang['alphabet']."</option>
	 <option value=\"ort\">".$lang['ort']."</option>
			 <option value=\"number\">".$lang['number']."</option>
			 <option value=\"rating\">".$lang['rating']."</option>
			 </select> <input type=\"submit\" value=\"".$lang['submit_text']."\" name=\"sort\">
			</form>";
}
 
			$tpl->parse_loop('main','item_list');
			}
else
$tpl->parse_loop('main','item_list',1,$lang['no_items_found']);
$tpl->register('main','paging, sort_drop_down, copyright');
$site_db->close();
$tpl->pprint('main');
?>

Jetzt möchte ich einen art index machen das wenn jemand auf buschtabe A klickt, nur die Orten die mit A beginen angezeigt werden...

Könnt Ihr mir helfen?

Saludos
Raul
 
Also folgender Maßen könntest Du es machen.
Zuerst legst Du eine Liste mit Links an (A - Z), die jeweils die index.php aufrufen und einen Parameter übergeben.
Also wenn jemand A klickt
HTML:
<a href="http://www.xyz.de/index.php?seite=A">A</a>
, dann wird als Parameter seite=A übergeben.
Jetzt musst Du in der index.php am Anfang eine Abfrage einbauen, in der das select Statement angelegt wird
PHP:
if(isset($_GET["seite"]))
  $que = "SELECT item_ort FROM instar_items WHERE item_ort LIKE '".$_GET["seite"]."%' ORDER BY item_ort";
else
  alles wie bisher
Wenn das mit $_GET["seite"] nicht klappen sollte, dann probier es mal mit $_POST["seite"].
Also so könnte das Ganze aussehen. (Ich hoffe ich habe mich verständlich ausgedrückt!?)

redlama
 
Hi Redlama

Besten Dank für Deine Hilfe!

Ich habe es ausprobiert...Die seite wird so weit aufgerufen, nur sind ebben alle einträge zu sehen und nicht nur die die aufgerufen werden :(

Die index.php sieht jetzt so aus(ich hoffe ich habe an richtige stelle Deinen Code hineingetan):
PHP:
 <?php
/////////////////////////////////
// Includes
/////////////////////////////////
define('root_path', '');
require ("inc/global.php");
////////////////////////////////////////////////
// Load Template
////////////////////////////////////////////////
$tpl = new template;
$tpl->load_file('main', "$skin_path/main.htm");
$que = "SELECT item_ort FROM instar_items WHERE item_ort LIKE 'A%' ORDER BY item_ort";
////////////////////////////////////////////////
// View Items
////////////////////////////////////////////////
if(isset($_POST["seite"])) 
  $que = "SELECT item_ort FROM instar_items WHERE item_ort LIKE '".$_POST["seite"]."%' ORDER BY item_ort"; 
else 
if (!$offset) $offset=0;
// Paging
$que = "SELECT count(*) AS number FROM ".$tableprefix."_items";
$count_result = $site_db->query($que);
while ($count = $site_db->fetch_array($count_result))
	$total_entries = $count["number"];
if ($total_entries > 0) {
		 $pages = $total_entries / $items_per_page;
			  if ($pages < 1) {
				   $pages = 1;
			  }
			  if ($pages / (int) $pages <> 1) {
				   $pages = (int) $pages + 1;
			  }
			  else {
				   $pages = $pages;
			  }
		 if ($total_entries>$items_per_page)
						{
			 if (($offset > $total_entries) or (!is_numeric($offset)))
						$offset = 0;
			 // current page number
			  $pagenow = ($offset/$items_per_page + 1);
			  $paging = $lang['page_display']." " . $pagenow . "/" . $pages;
			  // next/preview links
			  $next = $offset + $items_per_page;
			  $previous = $offset - $items_per_page;
			  if ($pages <> 1) {
				 $paging .= " || ";
				 if ($previous < 0) {
					$paging .= "<a href=$PHP_SELF?id=$id&offset=" . $next . ">";
					$paging .= "<acronym title='".$lang['page_next']." " . $items_per_page . "'>".$lang['page_next']."</acronym></a>";
				 }
				 elseif ($next >= $total_entries) {
					$paging .= "<a href=$PHP_SELF?id=$id&offset=" . $previous . ">";
					$paging .= "<acronym title='".$lang['page_prev']." " . $items_per_page . "'>".$lang['page_prev']."</acronym></a>";
				 }
				 else {
				   $paging .= "<a href=$PHP_SELF?id=$id&offset=" . $previous . ">";
				   $paging .= "<acronym title='".$lang['page_prev']." " . $items_per_page . "'>".$lang['page_prev']."</acronym></a>";
				   $paging .= " | ";
				   $paging .= "<a href=$PHP_SELF?id=$id&offset=" . $next . ">";
				   $paging .= "<acronym title='".$lang['page_next']." " . $items_per_page . "'>".$lang['page_next']."</acronym></a>";
				 }
			  }
			  // links to all pages
			  if ($pages>1)
											  {
			  $paging .= "<br>".$lang['page_goto'];
			  $i = 0;
			  while ($i < $pages) {
					$ri = $i + 1;
					$showpage = $i * $items_per_page;
					if ($ri == $pagenow)
					   $paging .= $ri . " ";
					else
					   $paging .= "<a href=$PHP_SELF?id=$id&offset=" . $showpage . ">" . $ri . "</a> ";
					$i++;
																		}
							 }
			}
			 if ($sort_order == "number")
   $order_by = "reviews DESC";
		   elseif ($sort_order == "rating")
						  $order_by = "avg_rating/avg_total DESC";
	 elseif ($sort_order == "ort")
	 $order_by = "item_ort";
			 else
				 $order_by = "item_name";
			$que = "SELECT * FROM ".$tableprefix."_items ORDER BY $order_by LIMIT $offset, $items_per_page";
			$result = $site_db->query($que);
			$item_list = array();
			$record = 0;
			while ($row = $site_db->fetch_array($result)){
  $sql = "SELECT reviews, avg_rating, avg_total FROM ".$tableprefix."_items WHERE item_id = $row[item_id]";
				$rev_result = $site_db->query($sql);
  $rev_row = $site_db->fetch_array($rev_result);
  
		 $avg_total = $rev_row[avg_total];
  $avg_rating = $rev_row[avg_rating];
  $num_reviews = $rev_row[reviews];

		 if ($num_reviews)
   $item_list[$record][read_reviews]="<a href=\"view.php?id=$row[item_id]\">$num_reviews $lang[reviews]</a>";
				else
   $item_list[$record][read_reviews]=$lang['no_reviews'];
				$item_list[$record][item_name] = $row[item_name];
	$item_list[$record][item_ort] = $row[item_ort];
	$item_list[$record][item_tel] = $row[item_tel];
	$item_list[$record][item_webseite] = $row[item_webseite];
				$item_list[$record][reviews] = $row[reviews];
		 $item_list[$record][item_description] = $row['description'];
				if (!$avg_total)
   $rat=0;
  else
   $rat = round ($avg_rating/$avg_total,2);
				 if ($rat==0) {$avg_rating = "<img border=\"0\" alt=\"noch nicht bewertet\" src=\"$skin_path/images/b0.gif\">";}
					elseif ($rat<=1) {$avg_rating = "<img border=\"0\" alt=\"$lang[avg_rating] $rat/5\" src=\"$skin_path/images/b1.gif\">";}
					elseif ($rat<=2) {$avg_rating = "<img border=\"0\" alt=\"$lang[avg_rating] $rat/5\" src=\"$skin_path/images/b2.gif\">";}
					elseif ($rat<=3) {$avg_rating = "<img border=\"0\" alt=\"$lang[avg_rating] $rat/5\" src=\"$skin_path/images/b3.gif\">";}
					elseif ($rat<=4) {$avg_rating = "<img border=\"0\" alt=\"$lang[avg_rating] $rat/5\" src=\"$skin_path/images/b4.gif\">";}
					elseif ($rat<=5) {$avg_rating = "<img border=\"0\" alt=\"$lang[avg_rating] $rat/5\" src=\"$skin_path/images/b5.gif\">";}
				$item_list[$record][rating] = $avg_rating;
			 $item_list[$record][post_reviews]="<a href=\"post.php?id=$row[item_id]\">$lang[post]</a>";
			 $record++;
				}
		   if ($total_entries > 1){
  $sort_drop_down = "<form method=\"POST\" action=\"$PHP_SELF?id=$id&offset=$offset\">
					".$lang['sort_text']."
					<select name=\"sort_order\">
			  <option>".$lang['select_text']."</option>
			  <option value=\"alphabetical\">".$lang['alphabet']."</option>
	 <option value=\"ort\">".$lang['ort']."</option>
			  <option value=\"number\">".$lang['number']."</option>
			  <option value=\"rating\">".$lang['rating']."</option>
			  </select> <input type=\"submit\" value=\"".$lang['submit_text']."\" name=\"sort\">
			</form>";
  }
  
			$tpl->parse_loop('main','item_list');
			}
  else
   $tpl->parse_loop('main','item_list',1,$lang['no_items_found']);
$tpl->register('main','paging, sort_drop_down, copyright');
$site_db->close();
$tpl->pprint('main');
?>
Weiss Du warum alle einträge gezeigt werden obwohl ich z.b nur die die mit B beginnen aufrufe?

Besten Dank nochmals für Deine Hilfe

Saludos
Raul
 
Was heißt es werden "alle" Einträge angezeigt?
Wirklich alle oder nur die, die mit A oder B beginnen.
Ich denke das select Statement unter "Load Template" solltest Du rausschmeißen können.
Und was gehört alles in die else Anweiung von dem Teil, den Du von mir hast?
Wenn du mehr als 1 zeile Quelltext in eine else Anweisung steckst, dann muss der ganze Bereich im else in { } eingeschlossen werden.

redlama
 
redlama hat gesagt.:
Was heißt es werden "alle" Einträge angezeigt?
Wirklich alle oder nur die, die mit A oder B beginnen.
Ja leider...alle werden angezeigt.

redlama hat gesagt.:
Ich denke das select Statement unter "Load Template" solltest Du rausschmeißen können.
Habe ich, bekomme aber immer wieder Zeilenfehler..

redlama hat gesagt.:
Und was gehört alles in die else Anweiung von dem Teil, den Du von mir hast?
Wenn du mehr als 1 zeile Quelltext in eine else Anweisung steckst, dann muss der ganze Bereich im else in { } eingeschlossen werden.
redlama
Das habe ich aber jetzt bahnhof verstanden :)
 
Du füllst deine Variable $que mehrmals..
Führst aber nur eine Abfrage durch.
das ist die letzte Zuweisung:
$que = "SELECT count(*) AS number FROM ".$tableprefix."_items";

in dem Moment überschreibst du schon die Abfragen für die Auswahl..
 
Zurück