2010-11-15 4 views
4

Comment puis-je remplacer une requête Views 3 par une requête SQL personnalisée dans le code?Comment remplacer une requête Drupal Views?

+0

Les vues 3 sont toujours en alpha. Êtes-vous sûr que Views 2 ne peut pas faire ce que vous voulez? –

+0

Oui, Views 3 est une exigence. Vues 3 semble être relativement mature à ce stade de mon expérience. – markdorison

+0

Pouvez-vous élaborer? Je veux dire - si vous allez complètement remplacer la requête, alors pourquoi utiliser des vues du tout? – marcvangend

Répondre

-1

Si vous souhaitez exécuter un SQL personnalisé (que Views ne peut pas générer), par exemple des champs calculés ou des jointures SQL compliquées, ce que vous recherchez est un module personnalisé.

Voir drupal un guide pour vous aider à démarrer

+2

Compris. Je cherchais plus pour quelles vues je peux utiliser pour remplacer la requête SQL. – markdorison

1

Ce ne peut plus être pertinent pour vous, mais il y a ce qui semble être une discussion très utile sur Drupal.org à Implementing custom SQL query for Views/Filters qui ressemble à cela répondre à ma question similaire.

En particulier, l'affiche initiale a suggéré la fixation à crochet views_views_pre_execute, qui quelqu'un d'autre mentionné peut être mis dans un module personnalisé comme:

function mymodulename_views_pre_execute(&$view) { 
    if($view->name=="groups_list2") { 
     // ... 
     $view->build_info['query'] = "SELECT node.nid AS nid ". 
     "FROM node WHERE node.type='%s'"; // wrapped for legibility 
    } 
} 

Et une autre affiche mentionné mySQL Views et Table Wizard (direct link), bien qu'ils J'ai mentionné que cela valait la peine de garder à l'esprit this article about mySQL Views performance

Cela vaut la peine de lire tout le fil sur Drupal.org, car je l'ai trouvé vraiment utile; J'espère que quelqu'un d'autre aussi.

Mise à jour: En effet, c'est précisément ce que nous sommes en train de faire - remplaçant dans un module views_views_pre_execute personnalisé pour injecter une nouvelle SQL avant qu'il arrive à la base de données. J'avais ouvert une question similaire (mais plus spécifique) sur Drupal.SE au Slow query with large dataset in Drupal views — better to process in SQL or PHP?, que vous pourriez trouver utile.

Questions connexes