আসল ক্যোয়ারী একটি দর্শন দ্বারা কার্যকর করা পান


23

আমাকে এসকিউএল ক্যোয়ারী সন্ধান করতে হবে যা একটি নির্দিষ্ট ক্যোয়ারী দ্বারা কার্যকর করা হয়। ভিউ মডিউলটি ভিউটি কনফিগার করার সময় এসকিউএল প্রদর্শন করতে পারে তবে দৃশ্যত কোয়েরিটি আসল কোয়েরি নয় যা সমস্ত ক্ষেত্রেই চালিত হয়
আমি সচেতন যে ডিভেল মডিউলটি ডাটাবেস কোয়েরিগুলি দেখাতে পারে, তবে প্রতিটি প্রশ্নের সাথে যুক্ত 'এ' লিঙ্কটি ক্লিক করা ছাড়া প্রকৃত প্রশ্নগুলি দেখানোর জন্য ডেভেলের কোনও উপায় নেই এবং সেগুলির শত শত রয়েছে

দর্শনটি বাস্তবায়িত করে এমন প্রকৃত ক্যোয়ারীটি আমি কীভাবে খুঁজে পেতে পারি? ভিউটি ব্লক হিসাবে প্রদর্শিত হয়।

উত্তর:


40

এসকিউএল স্ট্রিংটি দেখতে আপনাকে হুক_ভিউ_প্রিয়_অ্যাকটিউট এবং ডভেল ইনস্টলড ব্যবহার সহ ব্যবহার dpqকরতে হবে:

function hook_views_pre_execute(&$view) {
  dpq($view->build_info['query']);
}

ধন্যবাদ। এটি হুক এপি পৃষ্ঠায় পড়েছে যে "ক্যোয়ারী এখন সম্পূর্ণরূপে নির্মিত হয়েছে, তবে এটি এখনও db_rewrite_sql এর মাধ্যমে চালানো হয়নি।" এর অর্থ কি এই যে এরকম সম্ভাবনা রয়েছে যে কিছু অন্যান্য হুক স্কেল চালানোর আগে আবার লিখতে পারে? তারপরে আমি সমস্ত পরিস্থিতিতে প্রকৃত ক্যোয়ারীটি পাই না।
jjei

2
প্রাক_রেন্ডার সম্ভবত সেরা, তবে আমি নিশ্চিত না যে বেশিরভাগ ক্ষেত্রে ক্যোয়ারী খুব আলাদা হবে।
কাউন্টজারো

আমি আসলে মনে করি কিছু ক্ষেত্রে ভিউগুলিতে
শান ব্যানিস্টার

1
$ ভিউ-> বিল্ড_ইনফো ['ক্যোয়ারী'] একই কোয়েরি হিসাবে উপস্থিত বলে মনে হচ্ছে আপনি ভিউস সেটিংসে এসকিউএল কোয়েরি আউটপুট সক্ষম করলে ভিউ প্রদর্শন করে।
জনাথন এলমোর

এটি অকেজো। যেমন নির্বাচন করুন ব্যবহারকারীরা। ব্যবহারকারী হিসাবে ব্যবহারকারীরা তৈরি করেছেন, ব্যবহারকারীরা.লংকার হিসাবে ব্যবহারকারীগণ, ব্যবহারকারী.মেল এএস ব্যবহারকারী_মেল, ব্যবহারকারী.নাম এএস ব্যবহারকারীনাম, 'ব্যবহারকারী' এএস ফিল্ড_ডাটা_ফিল্ড_ফিলিস্ট_নেম_সেন্টিটি_সাইটি_সেন্টিটি_সেন্টিটি_সেন্টিটি_সেন্টিটি_সিডিটি {ব্যবহারকারীগণ} ব্যবহারকারীরা যেখানে ((ইউজার্স.স্যাটাস <> '0') এবং (ইউজারস স্ট্রেটস> 1441641600)) অর্ডার ব্যবহারকারীগণ_সৃজনিত ডিইএসসি লিমিটেড 20 অফফেসটি 0 আমার কাছে "ফিল্ড_ডাটা_ফিল্ড_ফাইস্ট_নেম_ইউজার_েন্টিটি_ টাইপ" রয়েছে যা ব্যবহারকারীর ক্ষেত্র এবং সঠিক ফলাফল দেয় না কোনও পরিবর্তন ছাড়াই।
মার্কো ব্লেজকোভিচ


2

প্যাচ বা হুকের দরকার নেই।

// Run the view.
$view = views_get_view('frontpage');
$view->set_display('page');
$view->pre_execute();
$view->execute();

/* Magic Below Here */
// Get query from the view.
$query = $view->query->query();

// Format SelectQueryInterface into a string.
$string = (string) $query;

// Replace arguments.
$arguments = $query->arguments();
if (!empty($arguments) && is_array($arguments)) {
  foreach ($arguments as $placeholder => &$value) {
    if (is_string($value)) {
      $value = "'$value'";
    }
  }
  $string = strtr($string, $arguments);
}

// Format the query string for more readable output.
$string = str_replace(array(' {', "\n{"), ' ', $string);
$string = str_replace(array('} ', "}\n"), ' AS ', $string);
$string = str_replace(', ', ",\n  ", $string);
$string = str_replace(' AND ', "\n  AND ", $string);
$string = str_replace(' ON ', "\n  ON ", $string);
$string = str_replace('SELECT ', "SELECT\n  ", $string);
$string = str_replace('ORDER BY ', "ORDER BY\n  ", $string);

// echo $string;
echo str_replace('  ', '&nbsp;&nbsp;', nl2br($string));

এটিকে আউটপুট হিসাবে দেয়

SELECT
  node.sticky AS node_sticky,
  node.created AS node_created,
  node.nid AS nid,
  'frontpage:page' AS view_name
FROM  node AS node
WHERE (( (node.promote <> 0)
  AND (node.status = 1) ))
ORDER BY
  node_sticky DESC,
  node_created DESC
LIMIT 10 OFFSET 0

আমি দুঃখিত, তবে আমার আউটপুটটি আলাদা: SELECT node.nid AS nid, 'node' AS field_data_field_name_node_entity_type, 'node' AS field_data_field_surname_node_entity_type, ইসি ...
লিও

আপনি কি আমাকে সাহায্য করতে পারেন?
লিও

1
আপনি কী এটিকে চালানোর চেষ্টা করছেন তা আমার কাছে লিয়ো আমার আরও তথ্যের প্রয়োজন। আউটপুটটি অপরিবর্তিত বাক্সের আউট ফ্রন্টপেজ ভিউয়ের জন্য; মনে হচ্ছে আপনি ফ্রন্টপেজ ভিউয়ের কনফিগারেশন পরিবর্তন করেছেন তাই এসকিউএল আলাদা হবে।
মাইকাইটাউন 2

আমাকে উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ, সম্ভবত আমি একটি প্রশ্ন তৈরি করব এবং নীচের লিঙ্কটি সন্নিবেশ করবো যাতে এই উত্তরটি স্প্যাম না হয়
লিও

প্রশ্নের লিংক, আমি আশা করি আমি পরিষ্কার ছিলাম drupal.stackexchange.com/questions/270994/…
লিও

1

দয়া করে এই প্যাচ চেষ্টা করুন:

--- a/sites/all/modules/views/plugins/views_plugin_query_default.inc
+++ b/sites/all/modules/views/plugins/views_plugin_query_default.inc
@@ -1393,6 +1393,19 @@ class views_plugin_query_default extends     views_plugin_query {
           $query->range($offset, $limit);
         }

+        $query_string = (string)$query;
+        $query_string = str_replace('{', '', $query_string);
+        $query_string = str_replace('}', '', $query_string);
+        $query_params = $query->getArguments();
+        foreach($query_params as $placeholder => $value) {
+          if(!is_numeric($value)) {
+            $query_string = str_replace($placeholder, "'$value'",    $query_string);
+          }
+          else {
+            $query_string = str_replace($placeholder, $value, $query_string);
+          }
+        }
+        drupal_set_message($query_string);
         $result = $query->execute();

         $view->result = array();

0

// ভিউ নাম এবং প্রাসঙ্গিক ফিল্টার নিড অনুসারে ফলাফল পান এখানে

    $viewr = views_get_view('top_block_on_product_display');
    $args[] = $myarg;
    $display_id = 'default';
    $viewr->set_arguments($args);
    $viewr->set_display($display_id);
    $viewr->execute();
    $view_content = $viewr->result;

আরও রেফারেন্সের জন্য ডকটি দেখুন: https://api.drupal.org/api/views/views.module/function/views_get_view_result/7.x-3.x

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.