total results db_query

am 05.11.2010 - 22:13 Uhr in
Hallo,
ich habe eine Volltextsuche individuell angepasst. Nun möchte ich die Gesamtanzahl der Suchergebnisse ausgeben. Mit db_query bin ich wenig vertraut und hab auch bei google keinen entsprechenden Eintrag gefunden. Kann mir jemand einen Tipp geben wie ich die Gesamtanzahl der Suchergebnisse mit db_query ermitteln kann ?
So sieht meinen Abfrage aus:
$sql = "SELECT * FROM {node_fulltextsearch} WHERE MATCH (title, searchwords) AGAINST ('%s') LIMIT $start, $display";
$result = db_query($sql,$qold);
while($row = db_fetch_array($result))
{...
- Anmelden oder Registrieren um Kommentare zu schreiben
Schau mal
am 05.11.2010 - 22:23 Uhr
Schau mal dort:
http://php-wiki.de/index.php/Function.mysql-num-rows
Das ist mir durhaus bekannt.
am 05.11.2010 - 22:34 Uhr
Das ist mir durhaus bekannt. Aber wie kann ich es mit db_query machen und obn in den Code integrieren? Kann ich die Syntax "mysql" und die von "db_query" einfach vermischen?
na so halt: $sql = "SELECT *
am 05.11.2010 - 23:12 Uhr
na so halt:
$sql = "SELECT * FROM {node_fulltextsearch} WHERE MATCH (title, searchwords) AGAINST ('%s') LIMIT $start, $display";
$result = db_query($sql,$qold);
$Gesamtzahl_der_Suchergebnisse = mysql_num_rows($result);
while($row = db_fetch_array($result))
{...
Kannst doch auch einfach noch
am 06.11.2010 - 01:05 Uhr
Kannst doch auch einfach noch eine Abfrage mit Count ausführen:
<?php
$sql = "SELECT * FROM {node_fulltextsearch} WHERE MATCH (title, searchwords) AGAINST ('%s') LIMIT $start, $display";
$result = db_query($sql,$qold);
$zeilenzahl = db_result(db_query("SELECT COUNT(Spalte) FROM {node_fulltextsearch} WHERE MATCH (title, searchwords) AGAINST ('%s') LIMIT $start, $display", $gold));
while($row = db_fetch_array($result))
{...
?>
Für das "Spalte" musst du natürlich einen Spaltennamen eingeben (z.B. nid, falls die in der Tabelle existiert; Am besten trägt man dort den Primärschlüssel der Tabelle ein). Dann wird die Abfrage ausgeführt und die Anzahl der Vorkommen der besagten Spalte gezählt (deswegen sollte es der Primärschlüssel sein). Und damit hast du die Zeilenzahl.
Allerdings kann man auch mal in die Drupal-Documentation schauen, um genau zu sein in den Teil des DB-Abstraction-Layer und sich dort ein wenig umsehen, dann findet man (zumindest für mySQL) noch folgende Variante:
<?php
$sql = "SELECT * FROM {node_fulltextsearch} WHERE MATCH (title, searchwords) AGAINST ('%s') LIMIT $start, $display";
$result = db_query($sql,$qold);
//Zeilenzahl ermitteln
$zeilenzahl = db_affected_rows();
while($row = db_fetch_array($result))
{...
?>
In einem Kommentar zu
db_affected_rows()
steht, dass das mit PostgreSQL wohl nicht so funktioniert, aber da es sich hier um mySQL zu handeln scheint, kann man diese einfachere Variante wohl durchaus verwenden.mysql_num_rows
würde ich nicht verwenden, da es einfach nicht nötig ist. Und wenn man die Möglichkeit hat, dann sollte man sich - meiner Meinung nach - auch an die API halten und nicht wild mischen (schließlich hat es seinen Sinn, dass der DB-Layer existiert)$totalresults =
am 06.11.2010 - 20:22 Uhr
$totalresults = db_affected_rows();
Die Variante mit
$Gesamtzahl_der_Suchergebnisse = mysql_num_rows($result);
ergibt eine Fehlermeldung.
Führe die Abfrage doch
am 06.11.2010 - 20:32 Uhr
Führe die Abfrage doch einfach nochmal ohne die Limitierung aus.
Das würde zwar funktionieren.
am 06.11.2010 - 22:00 Uhr
Das würde zwar funktionieren. Aber meine selbst programmierte Suche ist ohnehin schon etwas "unprofessionell" realisiert, so dass ich gerne aus Performance Gründen mit einer Abfrage auskommen würde, wenn es möglich ist. Ansonsten müsste ich es wohl so machen.
Und die Variante mit Count?
am 06.11.2010 - 22:06 Uhr
Und die Variante mit Count?
Ist ja letzendlich auch eine
am 06.11.2010 - 22:14 Uhr
Ist ja letzendlich auch eine extra Abfrage. Gibt es keine Möglichkeit direkt das Ergebnis der Abfrage zu zählen?
Ich glaube nicht bzw. machst
am 06.11.2010 - 22:31 Uhr
Ich glaube nicht bzw. machst du genau das mit db_affected_rows. Schließlich limitierst du deine Abfrage, somit steht auch nichts anderes drin. Wenn du eine Abfrage mit Limit machst, verstecken sich die anderen Dinge schließlich nicht irgendwo, sondern sie sind einfach nicht in der Abfrage enthalten. Du kannst nur die Zeilen zählen, die du abfragst. Du fragst nur die Datensätze in einem bestimmten Limit ab, also kannst du auch nur diese Datensätze zählen.