anzahl Datensätze

Hallo!

In dem Du die SELECT-Abfrage mit LIMIT 10 bzw. LIMIT 20 erweiterst, kannst Du die Abfrageergebnisse auf 10 bzw. 20 Ergebnisse limitieren.
Wenn Du alle Ergebnisse haben willst, lässt Du LIMIT weg.

Beispiel:
PHP:
if($auswahl == "foo") {
    $limit = " LIMIT 10";
} elseif ($auswahl == "bar") {
    $limit = " LIMIT 20";
} else {
    $limit = "";
}

$query = "SELECT * FROM `table`$limit;";
Nicht geprüft, aber so sollte es funktionieren.

Gruss Dr Dau
 
Und? Wo liegt das Problem?
HTML:
<a href="seite.php?view=10">10 anzeigen</a><br />
<a href="seite.php?view=20">20 anzeigen</a><br />
<a href="seite.php">alle anzeigen</a>
PHP:
if($_GET['view'] == 10) {
    $limit = " LIMIT 10";
} elseif ($_GET['view'] == 20) {
    $limit = " LIMIT 20";
} else {
    $limit = "";
}

$query = 'SELECT * FROM `table`' . $limit;
 
Hallo,

grundsätzlich funtzt es. Aber es ist nicht das was ich möchte. Ich muss vieleicht noch etwas präzieser werden. Ich mache als erstes folgendes:

PHP:
	$print .= '<!-- HTML form opening -->
					<form method="get" action="getAlerts(this.value)">
					<select name="hostname" onchange="getAlerts(this.value)">';

	while ($row = mysql_fetch_assoc($all_hosts)){
		$print .= '<option value="'.$row['Agent_Name'].'">'.$row['Agent_Name'].'</option>';
	}
	
	$print .= '<!-- HTML form closing -->
				</select>';
	$print .= '</form>';

Daraus nehme ich für die Abfrage dann ein Script das mir die abgefragte Tabelle mit eeiner Anzahl Datensätzen in ein DIV zurückschreibt.

HTML:
<script type="text/javascript">
function getAlerts(str)
{
if (str=="")
  {document.getElementById("alert").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {document.getElementById("alert").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("get","alertPerHost2.php?q="+str,true);
xmlhttp.send();
}
</script>

Jetzt möchte ich Liks haben die mir dann in der erstellten Tabelle eine Anzahl X Datensätze anzeigt. Sprich ich muss mein PHP script nochmal mit den bereits ausgewählten Infos + der zusätzlichen Anzahl an gewünschten Datensätzen neu abfragen.

PHP:
<?php

$q=$_GET['q'];



include ('connection.php');


//DB auswählen


mysql_select_db($config['db']);



$result = mysql_query("SELECT DISTINCT HA.Agent_Name, HA.Event_Time, HA.Alert_State, HA.Event_Type, HA.Alert_Text, HA.AlertID, HB.Clear_Reason, HB.Event_Time AS clrTime, HB.Event_Type AS clrType FROM (SELECT * from HawkAlertClearInfo WHERE Event_Type = 'onAlert' AND Agent_Name = '".$q."' ORDER BY Event_Time DESC LIMIT 30) HA LEFT JOIN HawkAlertClearInfo HB ON (HA.Agent_Name = HB.Agent_Name AND HA.AlertID = HB.AlertID AND HB.Event_Type not like 'onAlert') WHERE HA.Event_Type not like 'onClear'") or die("Query does not work as it should");



##############################

//Tabelle aufbauen

if(!isset($print)){
	$print = ' ';
	}

	$print .= '<h1>Alerts</h1><a>from '.$q.'</a>';
	$print .= '<br \>';
	$print .= '<a>show me 10,30 or all alerts for host '.$q.'</a>';
	$print .= '<table width="100%">';
	$print .= '<tbody>';

	$print .= '<tr>';

	$print .= '<th align="left" width="125px">Time</th>';
	$print .= '<th align="left" width="90px">State</th>';
	$print .= '<th align="left" width="50px">Type</th>';
	$print .= '<th align="left" width="400px">Alert</th>';

	$print .= '<th align="left">ID</th>';
	$print .= '<th align="left">Clear Reason</th>';

	$print .= '<th align="left" width="125px">Clear Time</th>';

	$print .= '<th align="left" width="50px">Type</th>';



	$print .= '</tr>';

	

	while($row = mysql_fetch_assoc($result)){
	
		if ($row['Alert_State'] == "ALERT_HIGH"){
			$print .= '<tr bgcolor="orange">';
			}
		else {
			$print .= '<tr>';
			}	
	

		$print .= '<td align="left">'.$row['Event_Time'].'</td>';

		$print .= '<td align="left">'.$row['Alert_State'].'</td>';
		$print .= '<td align="left">'.$row['Event_Type'].'</td>';
		$print .= '<td align="left">'.$row['Alert_Text'].'</td>';
		$print .= '<td align="left">'.$row['AlertID'].'</td>';

		$print .= '<td align="left">'.$row['Clear_Reason'].'</td>';
		$print .= '<td align="left">'.$row['clrTime'].'</td>';

		$print .= '<td align="left">'.$row['clrType'].'</td>';

		}

		$print .= '</tr>';

	

	$print .= '</tbody></table>';



print $print;



mysql_close($mysqlcon);

?>

Der obere Ansatz funtzt so nicht ganz bei mir. Vieleicht mache ich auch einiges falsch :-D
 
Ein Tipp am Rande. Man darf SQL-Statementents auch in PHP formatiert und lesbar schreiben. Und wenn man es vorher in eine Variable setzt, kann man auch einfacher debuggen...
PHP:
$sql = "
SELECT DISTINCT 
	HA.Agent_Name, 
	HA.Event_Time, 
	HA.Alert_State, 
	HA.Event_Type, 
	HA.Alert_Text, 
	HA.AlertID, 
	HB.Clear_Reason, 
	HB.Event_Time AS clrTime, 
	HB.Event_Type AS clrType 
FROM 
	(
		SELECT * 
		FROM HawkAlertClearInfo 
		WHERE Event_Type = 'onAlert' AND Agent_Name = '{$q}' 
		ORDER BY Event_Time DESC LIMIT 30
	) HA 
	LEFT JOIN HawkAlertClearInfo HB 
		ON (HA.Agent_Name = HB.Agent_Name 
			AND HA.AlertID = HB.AlertID 
			AND HB.Event_Type not like 'onAlert') 
WHERE 
	HA.Event_Type not like 'onClear'
";
	
$result = mysql_query($sql) or die("Query does not work as it should");
Ist doch schon viel verständlicher...
Achja, der teil AND HB.Event_Type not like 'onAlert' gehört in ein WHERE, nicht in den JOIN
 
Zurück