Drupal Modulentwicklung - SQL Unterabfrage

  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • warning: Parameter 1 to theme_field() expected to be a reference, value given in /www/htdocs/w008030f/blog/includes/theme.inc on line 170.
  • warning: Parameter 1 to theme_field() expected to be a reference, value given in /www/htdocs/w008030f/blog/includes/theme.inc on line 170.
  • Ihre Antwort bezieht sich auf einen Kommentar, der nicht vorhanden ist.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • warning: Parameter 1 to theme_field() expected to be a reference, value given in /www/htdocs/w008030f/blog/includes/theme.inc on line 170.
  • warning: Parameter 1 to theme_field() expected to be a reference, value given in /www/htdocs/w008030f/blog/includes/theme.inc on line 170.
  • warning: Parameter 1 to theme_field() expected to be a reference, value given in /www/htdocs/w008030f/blog/includes/theme.inc on line 170.
  • warning: Parameter 1 to theme_field() expected to be a reference, value given in /www/htdocs/w008030f/blog/includes/theme.inc on line 170.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • : Function ereg() is deprecated in /www/htdocs/w008030f/blog/includes/file.inc on line 647.
  • warning: Parameter 1 to theme_tagadelic_display() expected to be a reference, value given in /www/htdocs/w008030f/blog/modules/contrib/views/views.module on line 537.

Es kann eforderlich sein in einem DB Query mit Unterabfragen, Subqueries, zu arbeiten.

Problem dabei ist die korrekte Handhabung damit in der Unterabfrage Werte aus der sie umgebenden Abfrage zur Verfügung stehen.

Abfrage ohne Subquery

$query = db_query(db_rewrite_sql("SELECT DISTINCT n.nid FROM {node} WHERE n.type = 'blog' AND n.status = 1 AND n.uid <> 0"));

Abfrage mit Subquery

$query = db_query(db_rewrite_sql("SELECT DISTINCT @uid:=n.uid, n.nid FROM, (SELECT b.created FROM {node} b WHERE b.type = 'blog' AND b.uid = @uid ORDER BY b.created ASC LIMIT 1) AS oldest {node} WHERE n.type = 'blog' AND n.status = 1 AND n.uid <> 0"));

Der Sinn der Abfrage ist hier nicht die Frage. Mit einem Join könnte man den Query im Falle des Beispielcode ebenso realisieren.

Es geht wie gesagt um die Query-Syntax bezüglich eines Subquery.

Problem mit Pager-Query

Problem bei derartigen Subqueries ist das man damit Drupals Pager-Queries realisieren muss. Das bedeutet, dieser Query

$query = pager_query(db_rewrite_sql("SELECT DISTINCT @uid:=n.uid, n.nid FROM, (SELECT b.created FROM {node} b WHERE b.type = 'blog' AND b.uid = @uid ORDER BY b.created ASC LIMIT 1) AS oldest {node} WHERE n.type = 'blog' AND n.status = 1 AND n.uid <> 0". tablesort_sql($header)), $rows);

wird zwar keinen Fehler produzieren aber es wird zunächst kein Pager angezeigt.

Ursache dabei ist die Variable $pager_total in der Datei pager.inc. Sie ist leer bzw. der 1. Wert im Array ist 0.

Wer das Problem mit dem Pager lösen will sollte sich die Datei statistics.admin.inc ansehen.

Powered by Drupal. Created with ZenWalk.