আমি কীভাবে একটি মাইএসকিউএল ডাটাবেসে এনাম সম্ভাব্য মান পেতে পারি?


97

আমি আমার ড্রপডাউনগুলি একটি ডিবি থেকে স্বয়ংক্রিয়ভাবে এনাম সম্ভাব্য মান সহ পপুলেট করতে চাই। এটি কি মাইএসকিউএলে সম্ভব?

উত্তর:


98

আপনার জন্য আমার কাছে কোডিগিটার সংস্করণ রয়েছে। এটি মানগুলি থেকে উদ্ধৃতিগুলি পৃথক করে দেয়।

function get_enum_values( $table, $field )
{
    $type = $this->db->query( "SHOW COLUMNS FROM {$table} WHERE Field = '{$field}'" )->row( 0 )->Type;
    preg_match("/^enum\(\'(.*)\'\)$/", $type, $matches);
    $enum = explode("','", $matches[1]);
    return $enum;
}

29
এই সমাধানটি ভেঙে যাবে যদি এনাম মানগুলিতে নিজের মধ্যে কমা থাকে।
ফো।


4
পিএইচপি সংস্করণ: $ প্রকার = $ এটি-> মাইএসকিএল-> নির্বাচন করুন ("ক্ষেত্রের ক্ষেত্র = '$ ক্ষেত্র'" "থেকে টেক্সটগুলি দেখান) [0] [" প্রকার "];
আলেসান্দ্রো.ভিগনা

প্রকারের মানটিকে একটি অ্যারেতে রূপান্তর করতে পিএইচপি ব্যবহার করে আমি এই জাতীয় তৈরি করেছি: gments সেগমেন্টস = টিআর_রেপ্লেস ("'", "", $ সারি [0] [' টাইপ ']); $ সেগমেন্টস = টিআর_প্লেস ("এনাম", "", $ বিভাগ); $ সেগমেন্টস = টিআর_রেপ্লেস ("(", "", $ বিভাগ); $ সেগমেন্টস = টিআর_রেপ্লেস (")", "", $ বিভাগ); $ সেগমেন্টলিস্ট = বিস্ফোরিত (',', $ বিভাগ);
গুস্তাভো এমেল

4
সমস্ত এনাম মানগুলি বের করার জন্য আমি একটি পূর্ণ প্রমাণের সাথে একটি উত্তর যুক্ত করেছি , সেগুলির ভিতরে থাকা অক্ষরগুলি বিবেচনা করুন।
ডাকসান

53

আপনি এটির মতো জিজ্ঞাসা করে মানগুলি পেতে পারেন:

SELECT SUBSTRING(COLUMN_TYPE,5)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='databasename' 
    AND TABLE_NAME='tablename'
    AND COLUMN_NAME='columnname'

সেখান থেকে আপনাকে এটিকে অ্যারেতে রূপান্তর করতে হবে:

  • যদি আপনি অলস হন তবে সরাসরি অ্যারেতে এটি প্রমাণ করুন (যদিও মাইএসকিউএল এর একক উদ্ধৃতি অব্যাহতি বেমানান হতে পারে), বা
  • _ অপশন_আরএ = str_getcsv ($ বিকল্পগুলি, ',', "" ") সম্ভবত কাজ করবে (আপনি যদি প্রারম্ভটি বন্ধ এবং বন্ধনী বন্ধ করতে চান তবে স্ট্রিংয়ের পরিবর্তন করুন), বা
  • একটি নিয়মিত প্রকাশ

31

মাইএসকিউএল রেফারেন্স

আপনি যদি কোনও ENUM কলামের জন্য সমস্ত সম্ভাব্য মান নির্ধারণ করতে চান তবে tbl_name LIKE enum_col থেকে COLUMNS দেখান এবং আউটপুটের টাইপ কলামে ENUM সংজ্ঞাটি বিশ্লেষণ করুন।

আপনি কিছু চাইবেন:

$sql = "SHOW COLUMNS FROM `table` LIKE 'column'";
$result = $db->query($sql);
$row = $result->fetchRow();
$type = $row['Type'];
preg_match('/enum\((.*)\)$/', $type, $matches);
$vals = explode(',', $matches[1]);

এটি আপনাকে উদ্ধৃত মানগুলি দেবে। মাইএসকিউএল সর্বদা একক উদ্ধৃতিতে এগুলি আবদ্ধ করে দেয়। মানটির একক উদ্ধৃতি একক উদ্ধৃতি দ্বারা পালিয়ে যায়। আপনি সম্ভবত trim($val, "'")অ্যারে উপাদানগুলির প্রত্যেককে নিরাপদে কল করতে পারেন । আপনি রূপান্তর করতে চাইবেন ''শুধু মধ্যে '

নিম্নলিখিতগুলি ছাড়াই $ ট্রিম্মডভ্যালগুলি অ্যারের আইটেমগুলি ফিরিয়ে দেবে:

$trimmedvals = array();
foreach($vals as $key => $value) {
$value=trim($value, "'");
$trimmedvals[] = $value;
}

11

এটি উপরের অনেকের মতো, তবে লুপগুলি ছাড়াই আপনাকে ফলাফল দেয় এবং আপনি সত্যই চান এমনটি পান: নির্বাচিত বিকল্পগুলি তৈরি করার জন্য একটি সাধারণ অ্যারে।

বোনাস: এটি সেটের পাশাপাশি ENUM ক্ষেত্রের ধরণের জন্যও কাজ করে।

$result = $db->query("SHOW COLUMNS FROM table LIKE 'column'");
if ($result) {
    $option_array = explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2", $result[0]->Type));
}

$ বিকল্প_আররে: অ্যারে ([0] => লাল [1] => সবুজ [2] => নীল)


9

আপনি স্ট্রিংটিকে পার্স করতে পারেন যেমন এটি কোনও CSV (কমা বিভাজিত মান) স্ট্রিং was পিএইচপি-তে একটি দুর্দান্ত বিল্ট-ইন ফাংশন রয়েছে যার নাম str_getcsv যা কোনও CSV স্ট্রিংকে অ্যারেতে রূপান্তর করে।

// This is an example to test with
$enum_or_set = "'blond','brunette','redhead'";

// Here is the parser
$options = str_getcsv($enum_or_set, ',', "'");

// Output the value
print_r($options);

এটি আপনাকে নীচের মতো কিছু দেয়:

Array
(
    [0] => blond
    [1] => brunette
    [2] => redhead
)

এই পদ্ধতিটি আপনাকে আপনার স্ট্রিংগুলিতে একক উদ্ধৃতি পেতে দেয় (দুটি একক উদ্ধৃতি ব্যবহারের জন্য লক্ষ্য করুন):

$enum_or_set = "'blond','brunette','red''head'";

Array
(
    [0] => blond
    [1] => brunette
    [2] => red'head
)

Str_getcsv ফাংশন সম্পর্কে আরও তথ্যের জন্য, পিএইচপি ম্যানুয়ালটি পরীক্ষা করুন: http://uk.php.net/manual/en/function.str-getcsv.php


4
আমি যে উদাহরণ দিয়েছি তা ডেটাবেস থেকে ক্ষেত্রের তথ্য কীভাবে পাবেন তা আপনাকে দেখায় না, তবে কীভাবে এটি করবেন তা দেখানোর জন্য এই পৃষ্ঠায় প্রচুর উদাহরণ রয়েছে।
বাশাউস

4
str_getcsvকেবল পিএইচপি 5> = 5.3.0 এ কাজ করে, আপনি পূর্ববর্তী সংস্করণগুলিতে এই কার্যকারিতাটি পেতে চাইলে আপনি এই ফাইলটি অন্তর্ভুক্ত করতে পারেন।
স্টিভ

4
এটি হ্যান্ডেল করার সঠিক উপায় হওয়া উচিত কারণ এটি স্ট্রিংয়ের মধ্যে পালানো উক্তি এবং কমাগুলি বিবেচনা করে।
ক্রিস্টোফার সল-স্টোরগার্ড

4
উজ্জ্বল সমাধান, সময় সাশ্রয় করে;)
জন

9

এই ক্রিস Komlenic এর অন্যতম 8 কারনে মাইএসকিউএল এর ENUM ডাটা টাইপ ইভিল :

 ৪. স্বতন্ত্র ENUM সদস্যের তালিকা পাওয়া ব্যথা।

খুব সাধারণ প্রয়োজন হ'ল ডাটাবেস থেকে সম্ভাব্য মানগুলির সাথে একটি নির্বাচন-বাক্স পপুলেশন বা ড্রপ ডাউন তালিকা তৈরি করা। এটার মত:

রঙ নির্বাচন করুন:

[ select box ]

যদি এই মানগুলি 'রঙ' নামে একটি রেফারেন্স সারণীতে সংরক্ষণ করা হয় তবে আপনার যা দরকার তা হ'ল: SELECT * FROM colors... যা পরে ড্রপ ডাউন তালিকাটি গতিশীলভাবে তৈরি করতে পার্স করা যায়। আপনি রেফারেন্স সারণীতে রঙগুলি যুক্ত করতে বা পরিবর্তন করতে পারেন এবং আপনার সেক্সি অর্ডার ফর্মগুলি স্বয়ংক্রিয়ভাবে আপডেট হবে। অসাধারণ.

এখন দুষ্ট ENUM বিবেচনা করুন: আপনি কীভাবে সদস্য তালিকাটি নিষ্কাশন করবেন? আপনি DISTINCT মানগুলির জন্য আপনার টেবিলের ENUM কলামটি জিজ্ঞাসা করতে পারেন তবে এটি কেবলমাত্র ব্যবহৃত মানগুলি টেবিলে ব্যবহৃত হবে এবং প্রয়োজনীয় সমস্ত সম্ভাব্য মান নয় return আপনি INFORMATION_SCHEMA কে জিজ্ঞাসা করতে পারেন এবং একটি স্ক্রিপ্টিং ভাষার সাহায্যে ক্যোয়ারী ফলাফল থেকে তাদের পার্স করতে পারেন, তবে এটি অহেতুক জটিল। আসলে, আমি কোনও ENUM কলামের সদস্য তালিকাটি বের করার কোনও মার্জিত, খাঁটি এসকিউএল উপায় সম্পর্কে জানি না।


7

এটি করার আরও আধুনিক পদ্ধতি, এটি আমার পক্ষে কাজ করেছে:

function enum_to_array($table, $field) {    
    $query = "SHOW FIELDS FROM `{$table}` LIKE '{$field}'";
    $result = $db->query($sql);
    $row = $result->fetchRow();
    preg_match('#^enum\((.*?)\)$#ism', $row['Type'], $matches);
    $enum = str_getcsv($matches[1], ",", "'");
    return $enum;
}

পরিণামে, "এনাম ()" থেকে পৃথক হয়ে গেলে এনাম মানগুলি কেবল একটি সিএসভি স্ট্রিং থাকে, সুতরাং এটিকে পার্স করুন!


5

এখানে mysqli জন্য

function get_enum_values($mysqli, $table, $field )
{
    $type = $mysqli->query("SHOW COLUMNS FROM {$table} WHERE Field = '{$field}'")->fetch_array(MYSQLI_ASSOC)['Type'];
    preg_match("/^enum\(\'(.*)\'\)$/", $type, $matches);
    $enum = explode("','", $matches[1]);
    return $enum;
}
$deltypevals = get_enum_values($mysqli, 'orders', 'deltype');
var_dump ($deltypevals);

4

ল্যাট্রোল ফ্রেমওয়ার্কের জন্য অভিযোজিত প্যাট্রিক সাভাল এখানে একই ফাংশনটি দিচ্ছেন

function get_enum_values($table, $field)
{

   $test=DB::select(DB::raw("show columns from {$table} where field = '{$field}'"));

   preg_match('/^enum\((.*)\)$/', $test[0]->Type, $matches);
   foreach( explode(',', $matches[1]) as $value )
   {
       $enum[] = trim( $value, "'" );   
   }

   return $enum;

}

3

লারাভেলের পক্ষে এটি কাজ করেছে:

$result = DB::select("SHOW COLUMNS FROM `table_name` LIKE 'status';");
$regex = "/'(.*?)'/";
preg_match_all( $regex , $result[0]->Type, $enum_array );
$enum_fields = $enum_array[1];
echo "<pre>";
print_r($enum_fields);

আউটপুট:

Array
(
[0] => Requested
[1] => Call Back
[2] => Busy
[3] => Not Reachable
[4] => Not Responding
)

নিখুঁত আপনাকে ধন্যবাদ. এটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে (
লারাভেল

2

জেসনবার কী বলছে আমি কেবল তা যুক্ত করতে চাই, যখন জিজ্ঞাসা করা হয়েছিল:

SHOW columns FROM table

যদি আপনি অ্যারে হিসাবে ফলাফলটি পান তবে এটি দেখতে এরকম হবে:

array([0],[Field],[1],[Type],[2],[Null],[3],[Key],[4],[Default],[5],[Extra])

যেখানে [এন] এবং [পাঠ্য] একই মান দেয়।
আমি খুঁজে পেয়েছি কোন ডকুমেন্টেশন সত্যই বলা হয়নি। আর কি আছে তা জানার জন্য কেবল ভাল।



2

এটা চেষ্টা কর

describe table columnname

আপনাকে সেই টেবিলের সেই কলামটি সম্পর্কে সমস্ত তথ্য দেয়;


2

কিছু মডেলের পদ্ধতি হিসাবে কোডিগিটার অ্যাডাপ্টিং সংস্করণ:

public function enum_values($table_name, $field_name)
{
    $query = $this->db->query("SHOW COLUMNS FROM `{$table_name}` LIKE '{$field_name}'");

    if(!$query->num_rows()) return array();
    preg_match_all('~\'([^\']*)\'~', $query->row('Type'), $matches);

    return $matches[1];
}

ফলাফল:

array(2) {
    [0]=> string(13) "administrator"
    [1]=> string(8) "customer"
}

এটি প্রশ্নের উত্তর দেয় না। কোনও লেখকের কাছ থেকে সমালোচনা বা স্পষ্টতার জন্য অনুরোধ জানাতে, তাদের পোস্টের নীচে একটি মন্তব্য দিন - আপনি সর্বদা আপনার নিজের পোস্টে মন্তব্য করতে পারেন, এবং আপনার যথেষ্ট সুনামের পরে আপনি কোনও পোস্টে মন্তব্য করতে সক্ষম হবেন ।
Worldofjr

তুমি কি নিশ্চিত? কেন? এই ফাংশন ফলাফল কেবল মত ফাংশন মধ্যে সন্নিবেশ করতে form_dropdown ...
Андрій Глущенко

2

আপনারা সবাই কিছু অদ্ভুত এবং জটিল রেজেক্স প্যাটার্ন ব্যবহার করেন x)

প্রাগ_ম্যাচ ছাড়া আমার সমাধানটি এখানে:

function getEnumTypes($table, $field) {
    $query = $this->db->prepare("SHOW COLUMNS FROM $table WHERE Field = ?");
    try {$query->execute(array($field));} catch (Exception $e) {error_log($e->getMessage());}
    $types = $query->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_UNIQUE, 1)[$field];
    return explode("','", trim($types, "enum()'"));
}

2

আপনি এই সিনট্যাক্সটি মাইএসকিউএল QUERY এ এনাম সম্ভাব্য মানগুলি পেতে ব্যবহার করতে পারেন:

$syntax = "SELECT COLUMN_TYPY FROM information_schema.`COLUMNS` 
WHERE TABLE_NAME = '{$THE_TABLE_NAME}' 
AND COLUMN_NAME = '{$THE_COLUMN_OF_TABLE}'";

এবং আপনি মান পাবেন, উদাহরণস্বরূপ: এনাম ('পুরুষ', 'মহিলা')

এটি উদাহরণস্বরূপ sytax php:

<?php
function ($table,$colm){

// mysql query.
$syntax = mysql_query("SELECT COLUMN_TYPY FROM information_schema.`COLUMNS` 
WHERE TABLE_NAME = '$table' AND COLUMN_NAME ='$colm'");

if (!mysql_error()){
 //Get a array possible values from table and colm.
 $array_string = mysql_fetch_array($syntax);

    //Remove part string
    $string = str_replace("'", "", $array_string['COLUMN_TYPE']);
    $string = str_replace(')', "", $string);
    $string = explode(",",substr(5,$string));
}else{
    $string = "error mysql :".mysql_error();
}
// Values is (Examples) Male,Female,Other
return $string;
}
?>

2

এই থ্রেডে অন্য প্রতিটি উত্তরের সমস্যা হ'ল এগুলির কোনওটি এনামের মধ্যে থাকা স্ট্রিংয়ের সমস্ত বিশেষ ক্ষেত্রে সঠিকভাবে পার্স করে না।

সবচেয়ে বড় বিশেষ কেস চরিত্র যা আমাকে লুপের জন্য ছুঁড়ে মারছিল তা ছিল সিঙ্গেল কোট, কারণ তারা নিজেরাই একসাথে 2 একক উদ্ধৃতি হিসাবে এনকোডেড রয়েছে! সুতরাং, উদাহরণস্বরূপ, মান সহ একটি এনাম 'a'হিসাবে এনকোড করা আছে enum('''a''')। ভয়াবহ, তাই না?

ঠিক আছে, সমাধানটি হ'ল মাইএসকিউএল আপনার জন্য ডেটা পার্স করতে ব্যবহার করুন!

যেহেতু প্রত্যেকে এই থ্রেডে পিএইচপি ব্যবহার করছে, তাই আমি এটি ব্যবহার করব। নীচে পূর্ণ কোড দেওয়া হল। আমি এটি পরে ব্যাখ্যা করব। প্যারামিটারটি $FullEnumStringপুরো এনাম স্ট্রিংটি ধারণ করবে, আপনি অন্য যে কোনও উত্তর থেকে যে পদ্ধতিটি ব্যবহার করতে চান তা থেকে নেওয়া হবে। RunQuery()এবং FetchRow()(অ-অ্যাসোসিয়েটিভ) আপনার প্রিয় ডিবি অ্যাক্সেস পদ্ধতির জন্য স্ট্যান্ড ইন।

function GetDataFromEnum($FullEnumString)
{
    if(!preg_match('/^enum\((.*)\)$/iD', $FullEnumString, $Matches))
        return null;
    return FetchRow(RunQuery('SELECT '.$Matches[1]));
}

preg_match('/^enum\((.*)\)$/iD', $FullEnumString, $Matches)নিশ্চিত করে যে এনাম মান আমাদের প্রত্যাশার সাথে মেলে, যা বলা হয় "enum(".$STUFF.")"(আগে বা পরে কিছুই নেই)। প্রিগ_ম্যাচ ব্যর্থ হলে, NULLফিরে আসবে।

এই preg_matchএছাড়াও স্ট্রিং তালিকা, অদ্ভুত এসকিউএল সিনট্যাক্স মধ্যে পলান সঞ্চয়, $Matches[1]। এরপরে, আমরা এর থেকে প্রকৃত ডেটা পেতে সক্ষম হতে চাই। সুতরাং আপনি কেবল চালান "SELECT ".$Matches[1], এবং আপনার প্রথম রেকর্ডে স্ট্রিংগুলির একটি সম্পূর্ণ তালিকা রয়েছে!

সুতরাং কেবল একটি দিয়ে এই রেকর্ডটি টানুন FetchRow(RunQuery(...))এবং আপনি সম্পন্ন করেছেন।

আপনি যদি এসকিউএল-এ এই পুরো জিনিসটি করতে চান তবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন

SET @TableName='your_table_name', @ColName='your_col_name';
SET @Q=(SELECT CONCAT('SELECT ', (SELECT SUBSTR(COLUMN_TYPE, 6, LENGTH(COLUMN_TYPE)-6) FROM information_schema.COLUMNS WHERE TABLE_NAME=@TableName AND COLUMN_NAME=@ColName)));
PREPARE stmt FROM @Q;
EXECUTE stmt;

PS কে এ সম্পর্কে কাউকে কিছু বলা থেকে বিরত রাখতে, না, আমি বিশ্বাস করি না যে এই পদ্ধতিটি এসকিউএল ইঞ্জেকশন নিয়ে যেতে পারে।


দুর্দান্ত সমাধান! অবশ্যই এটি এসকিউএল ইঞ্জেকশন হতে পারে না, কারণ আমরা আমাদের নিজস্ব ডিবি স্কিমা থেকে মান নিচ্ছি।
টেরেলগুলি

পদ্ধতির জন্য ধন্যবাদ। আমি অ্যারেতে এই জাতীয় getting "বিল্ডিং_রেগুলেশনস": "বিল্ডিং_রেগুলেশনস", "0": "বিল্ডিং_রেগুলেশনস", "তালিকা_ উপরে_মালিকারা": "তালিকা_মোখে" "," 1 ":" তালিকা_ ওপরে মালিকদের "এর মতো পুনরাবৃত্ত মানগুলি পাচ্ছি} কোন ধারণা কেন? (Phpmyadmin এ ভাল কাজ করে তবে POD অবজেক্টটি ব্যবহার করে চালানো হলে এটি ফলাফল run)
Guney Ozsan

পিএইচপি-তে কোনও প্রশ্ন থেকে মাইএসকিএল সারি থেকে মান টানানোর 3 টি উপায় রয়েছে। mysql_fetch_assoc যথাযথ কীগুলির সাথে মানগুলিতে টান দেয়, mysql_fetch_row সংখ্যাসূচক কীগুলির সাথে মানগুলিতে টান দেয় এবং mysql_fetch_array মানগুলি এক বা উভয় হিসাবে টানতে পারে। দেখে মনে হচ্ছে আপনার পিডিও এই অপারেশনের জন্য mysql_fetch_array ব্যবহার করছে। আনার সময় এটি না করার জন্য বলার একটি উপায় থাকতে হবে।
ডাকসান

বা আপনার পিডো সমস্যার আরও অনেক সহজ উত্তর, কেবল একটি অ্যারে_উনিক বা একটি অ্যারে_ ফিল্টার চালান যা সংখ্যার সূচকগুলি সরিয়ে দেয়।
ডাকসান

দুর্দান্ত! এইভাবে আপনি মাইএসকিউএলকে সমস্ত কঠোর পরিশ্রম করতে পারেন।
স্পেন্সার উইলিয়ামস

2

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

SELECT
    SUBSTRING(COLUMN_TYPE, 6, LENGTH(COLUMN_TYPE) - 6) AS val
FROM
    information_schema.COLUMNS
WHERE
    TABLE_NAME = 'articles'
AND
    COLUMN_NAME = 'status'

SUBSTRINGএখন 6 ষ্ঠ চরিত্র আরম্ভ করা হয় এবং একটি দৈর্ঘ্য যা 6 অক্ষর মোট তুলনায় ছোট, চিহ্ন প্রথম বন্ধনী সরানোর ব্যবহার করে।


1

এটি আমার পক্ষে কাজ করবে:

SELECT REPLACE(SUBSTRING(COLUMN_TYPE,6,(LENGTH(COLUMN_TYPE)-6)),"'","")
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='__TABLE_SCHEMA__' 
AND TABLE_NAME='__TABLE_NAME__'
AND COLUMN_NAME='__COLUMN_NAME__'

এবং তারপর

explode(',', $data)

1

পিএইচপি 5.6+ এর জন্য

$mysqli = new mysqli("example.com","username","password","database");
$result = $mysqli->query("SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='table_name' AND COLUMN_NAME='column_name'");
$row = $result->fetch_assoc();
var_dump($row);

1

এটি অসাধারণ যে কীভাবে আপনারা কেউ ভাবেন নি যে আপনি এনাম ক্ষেত্রটি ব্যবহার করছেন তার অর্থ হ'ল নির্ধারিত মানগুলি "একটি প্রাইরি" হিসাবে পরিচিত।

সুতরাং যদি মানগুলি "একটি প্রাইমারি" জানা থাকে তবে সেগুলি পরিচালনা করার সেরা উপায়গুলি খুব সাধারণ এনুম শ্রেণীর মাধ্যমে।

নিয়ম চুম্বন এবং একটি ডাটাবেস কল সংরক্ষণ করুন।

<?php
class Genre extends \SplEnum {
 const male = "Male";
 const female = "Female";
}

http://it2.php.net/manual/en/class.splenum.php


0

আমি এইভাবে এনাম মান পেতে পারি:

SELECT COLUMN_TYPE 
FROM information_schema.`COLUMNS` 
WHERE TABLE_NAME = 'tableName' 
     AND COLUMN_NAME = 'columnName';

এই স্কয়ারটি চালিয়ে আমি পেয়েছি: এনাম ('বিডিবিএল', 'এবি ব্যাংক')

তারপরে আমি নীচের কোডটি ব্যবহার করে ঠিক মূল্য ফিল্টার করেছি:

preg_match("/^enum\(\'(.*)\'\)$/", $type, $matches);
$enum = explode("','", $matches[1]);
var_dump($enum) ;

আউট পুট:

অ্যারে (2) {[0] => স্ট্রিং (4) "বিডিবিএল" [1] => স্ট্রিং (7) "এবি ব্যাংক"}


0
DELIMITER //

    DROP FUNCTION IF EXISTS ENUM_VALUES;

    CREATE FUNCTION ENUM_VALUES(

        _table_name VARCHAR(64), 
        _col_name VARCHAR(64)

    ) RETURNS JSON

        BEGIN

            RETURN (
                SELECT CAST(CONCAT('[', REPLACE(SUBSTRING(COLUMN_TYPE, 6, LENGTH(COLUMN_TYPE) - 6), "'", '"'), ']') AS JSON)
                  FROM information_schema.COLUMNS
                 WHERE TABLE_SCHEMA = 'db_name'
                   AND TABLE_NAME   = _table_name
                   AND COLUMN_NAME  = _col_name
                   AND DATA_TYPE    = 'enum'
            );

        END //

DELIMITER ;

উদাহরণ:

SELECT ENUM_VALUES('table_name', 'col_name');

0

নির্বাচন করুন নির্বাচন করুন (COLUMN_TYPE, 6, লেন্থ (COLUMN_TYPE) - 6) তথ্য থেকে স্নাতকোত্তর.ক্লামএনএস যেখানে টেবিল_NAME = 'নিবন্ধ' এবং COLUMN_NAME = 'স্থিতি'

এনামের জন্য কাজ করবে না ('', 'এক্স' এক্সএক্স)


4
এই ধরণের উত্তর একটি মন্তব্যে থাকা উচিত।
রাহুল হরিণখেদে

স্ট্যাক ওভারফ্লো বেশ বুদ্ধিমান এবং খ্যাতি সিস্টেমের কারণে আমাকে মন্তব্য করতে দেয় না।
সালভর হার্ডিন

0

এখানে একটি কাস্টম ওয়ার্ডপ্রেস টেবিলের জন্য একটি সমাধান। এটি ENMA মানগুলির (,)মধ্যে কমা ছাড়াই কাজ করবে

function get_enum_values($wpdb, $table, $field) {

    $values = array();
    $table = "{$wpdb->prefix}{$table}";
    $query = "SHOW COLUMNS FROM {$table} WHERE Field = '{$field}'";
    $results = $wpdb->get_results($query, ARRAY_A);

    if (is_array($results) && count($results) > 0) {

        preg_match("/^enum\(\'(.*)\'\)$/", $results[0]['Type'], $matches);

        if (is_array($matches) && isset($matches[1])) {

            $values = explode("','", $matches[1]);

        }

    }

    return $values;

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