এসকিউএল যোগ দিন নির্বাচন করুন: সমস্ত কলামকে 'উপসর্গ। *' হিসাবে উপস্থাপন করা সম্ভব?


206

আমি ভাবছি এসকিউএল এ সম্ভব কিনা। বলুন আপনার দুটি এবং দুটি টেবিল রয়েছে এবং আপনি টেবিল A ​​তে একটি নির্বাচন করুন এবং টেবিল বি তে যোগদান করুন:

SELECT a.*, b.* FROM TABLE_A a JOIN TABLE_B b USING (some_id);

যদি টেবিল এ-এর কলামগুলিতে 'এ_আইডি', 'নাম', এবং 'কিছু_আইডি' থাকে, এবং টেবিল বিতে 'b_id', 'নাম' এবং 'কিছু_আইডি' থাকে, তবে কোয়েরিতে কলামগুলি 'এ_আইডি', 'নাম', 'কিছু_আইড' ফিরিয়ে দেবে ',' বি_আইডি ',' নাম ',' কিছু_আইডি '। টেবিল বি এর কলামের নামগুলি প্রতিটি স্তম্ভকে পৃথকভাবে তালিকাভুক্ত না করে উপস্থাপন করার কোনও উপায় আছে কি? এর সমতুল্য:

SELECT a.*, b.b_id as 'b.b_id', b.name as 'b.name', b.some_id as 'b.some_id'
FROM TABLE_A a JOIN TABLE_B b USING (some_id);

তবে, যেমনটি উল্লেখ করা হয়েছে, প্রতিটি কলামের তালিকা না করেই, এরকম কিছু:

SELECT a.*, b.* as 'b.*'
FROM TABLE_A a JOIN TABLE_B b USING (some_id);

মূলত কিছু বলার জন্য, "প্রতিটি কলাম খ। * দিয়ে 'কিছু' দিয়ে ফিরে আসে" f এটা কি সম্ভব নাকি আমি ভাগ্যের বাইরে?

আপনার সাহায্যের জন্য আগাম ধন্যবাদ!

সম্পাদনা করুন: নির্বাচন করুন * ব্যবহার না করার বিষয়ে পরামর্শ বৈধ পরামর্শ তবে আমার প্রসঙ্গে প্রাসঙ্গিক নয়, সুতরাং দয়া করে সমস্যাটি আটকে দিন - সমস্ত ক্ষেত্রে একটি উপসর্গ (এসকিউএল কোয়েরিতে নির্দিষ্ট ধ্রুবক) যুক্ত করা কি সম্ভব? যোগদানের ক্ষেত্রে একটি টেবিলের কলামের নাম?

সম্পাদনা করুন: আমার চূড়ান্ত লক্ষ্যটি হচ্ছে আমার যোগদানের জন্য দুটি টেবিলের উপর একটি নির্বাচন * করতে সক্ষম হওয়া, এবং আমি জানাতে সক্ষম হব, যে ফলাফলগুলি আমার ফলাফল সেটে পেয়েছি তার নামগুলি থেকে টেবিল এ থেকে কোন কলামগুলি এসেছে এবং কোন কলামগুলি এসেছে টেবিল বি থেকে আবার, আমি স্বতন্ত্রভাবে কলামগুলি তালিকা করতে চাই না, আমার একটি নির্বাচন * করতে সক্ষম হওয়া দরকার।


আপনার ক্যোয়ারির ফলাফলটি আপনি ঠিক কী আশা করবেন? আমি বিভ্রান্ত
গ্রেগড

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

6
আমি যখন একাধিক সারণী থেকে কলামগুলি দেখার জন্য একটি দ্রুত নির্বাচন করি তখন আমি মাঝে মাঝে 'এএএএএ', এ। *, 'বিবিবিবিবি', বি নির্বাচন করি * সারিগুলিতে স্ক্যান করার সময় কমপক্ষে একটি টেবিল শনাক্তকারী থাকতে হবে
Kristen

সম্ভাব্য অনুরূপ: stackoverflow.com/questions/2595068/...
Andrioid

উত্তর:


35

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


11
আমি নিশ্চিত না যে এটি কীভাবে আপনার প্রশ্নের জবাব দেয়। আমি এমএস এসকিউএল সার্ভার ব্যবহার করছি এবং টেবিলের নামটি ফলসেটটিতে কলামের নামগুলিতে উপনাম সংযোজন না করে একটি উপনাম যুক্ত করছি।
পায়গো

74

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

SELECT '' as table1_dummy, table1.*, '' as table2_dummy, table2.*, '' as table3_dummy, table3.* FROM table1
JOIN table2 ON table2.table1id = table1.id
JOIN table3 ON table3.table1id = table1.id

আমি বুঝতে পেরেছি এটি আপনার প্রশ্নের সঠিক উত্তর দেয় না, তবে আপনি যদি কোডার হন তবে নকল কলামের নাম দিয়ে টেবিলগুলি আলাদা করার এটি দুর্দান্ত উপায়। আশা করি এটি কারও সাহায্য করবে।


24

কেন এটি প্রয়োজনীয় তা আমি পুরোপুরি বুঝতে পেরেছি - কমপক্ষে আমার পক্ষে দ্রুত প্রোটোটাইপিংয়ের সময় এটি কার্যকর যখন অনেকগুলি টেবিলের সাথে যোগ দেওয়ার দরকার হয়, যার মধ্যে অনেকগুলি অন্তর্ভুক্ত যোগদান করে। যত তাড়াতাড়ি একটি কলামের নাম দ্বিতীয় "জোড়ের টেবিল। *" ফিল্ড ওয়াইল্ড কার্ডে একই হয়, মূল টেবিলের ক্ষেত্রের মানগুলি জোড়যোগ্য টেবিলগুলির সাথে ওভার্রাইড করা হয়। প্রবণতা, হতাশার এবং DRY লঙ্ঘনের সময় ত্রুটিগুলি যখন বারে বারে এলিয়াসগুলির সাথে টেবিল ক্ষেত্রগুলি ম্যানুয়ালি নির্দিষ্ট করে থাকে ...

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

function prefixed_table_fields_wildcard($table, $alias)
{
    global $wpdb;
    $columns = $wpdb->get_results("SHOW COLUMNS FROM $table", ARRAY_A);

    $field_names = array();
    foreach ($columns as $column)
    {
        $field_names[] = $column["Field"];
    }
    $prefixed = array();
    foreach ($field_names as $field_name)
    {
        $prefixed[] = "`{$alias}`.`{$field_name}` AS `{$alias}.{$field_name}`";
    }

    return implode(", ", $prefixed);
}

function test_prefixed_table_fields_wildcard()
{
    global $wpdb;

    $query = "
    SELECT
        " . prefixed_table_fields_wildcard($wpdb->posts, 'campaigns') . ",
        " . prefixed_table_fields_wildcard($wpdb->posts, 'venues') . "
        FROM $wpdb->posts AS campaigns
    LEFT JOIN $wpdb->postmeta meta1 ON (meta1.meta_key = 'venue' AND campaigns.ID = meta1.post_id)
    LEFT JOIN $wpdb->posts venues ON (venues.post_status = 'publish' AND venues.post_type = 'venue' AND venues.ID = meta1.meta_value)
    WHERE 1
    AND campaigns.post_status = 'publish'
    AND campaigns.post_type = 'campaign'
    LIMIT 1
    ";

    echo "<pre>$query</pre>";

    $posts = $wpdb->get_results($query, OBJECT);

    echo "<pre>";
    print_r($posts);
    echo "</pre>";
}

আউটপুট:

SELECT
    `campaigns`.`ID` AS `campaigns.ID`, `campaigns`.`post_author` AS `campaigns.post_author`, `campaigns`.`post_date` AS `campaigns.post_date`, `campaigns`.`post_date_gmt` AS `campaigns.post_date_gmt`, `campaigns`.`post_content` AS `campaigns.post_content`, `campaigns`.`post_title` AS `campaigns.post_title`, `campaigns`.`post_excerpt` AS `campaigns.post_excerpt`, `campaigns`.`post_status` AS `campaigns.post_status`, `campaigns`.`comment_status` AS `campaigns.comment_status`, `campaigns`.`ping_status` AS `campaigns.ping_status`, `campaigns`.`post_password` AS `campaigns.post_password`, `campaigns`.`post_name` AS `campaigns.post_name`, `campaigns`.`to_ping` AS `campaigns.to_ping`, `campaigns`.`pinged` AS `campaigns.pinged`, `campaigns`.`post_modified` AS `campaigns.post_modified`, `campaigns`.`post_modified_gmt` AS `campaigns.post_modified_gmt`, `campaigns`.`post_content_filtered` AS `campaigns.post_content_filtered`, `campaigns`.`post_parent` AS `campaigns.post_parent`, `campaigns`.`guid` AS `campaigns.guid`, `campaigns`.`menu_order` AS `campaigns.menu_order`, `campaigns`.`post_type` AS `campaigns.post_type`, `campaigns`.`post_mime_type` AS `campaigns.post_mime_type`, `campaigns`.`comment_count` AS `campaigns.comment_count`,
    `venues`.`ID` AS `venues.ID`, `venues`.`post_author` AS `venues.post_author`, `venues`.`post_date` AS `venues.post_date`, `venues`.`post_date_gmt` AS `venues.post_date_gmt`, `venues`.`post_content` AS `venues.post_content`, `venues`.`post_title` AS `venues.post_title`, `venues`.`post_excerpt` AS `venues.post_excerpt`, `venues`.`post_status` AS `venues.post_status`, `venues`.`comment_status` AS `venues.comment_status`, `venues`.`ping_status` AS `venues.ping_status`, `venues`.`post_password` AS `venues.post_password`, `venues`.`post_name` AS `venues.post_name`, `venues`.`to_ping` AS `venues.to_ping`, `venues`.`pinged` AS `venues.pinged`, `venues`.`post_modified` AS `venues.post_modified`, `venues`.`post_modified_gmt` AS `venues.post_modified_gmt`, `venues`.`post_content_filtered` AS `venues.post_content_filtered`, `venues`.`post_parent` AS `venues.post_parent`, `venues`.`guid` AS `venues.guid`, `venues`.`menu_order` AS `venues.menu_order`, `venues`.`post_type` AS `venues.post_type`, `venues`.`post_mime_type` AS `venues.post_mime_type`, `venues`.`comment_count` AS `venues.comment_count`
    FROM wp_posts AS campaigns
LEFT JOIN wp_postmeta meta1 ON (meta1.meta_key = 'venue' AND campaigns.ID = meta1.post_id)
LEFT JOIN wp_posts venues ON (venues.post_status = 'publish' AND venues.post_type = 'venue' AND venues.ID = meta1.meta_value)
WHERE 1
AND campaigns.post_status = 'publish'
AND campaigns.post_type = 'campaign'
LIMIT 1

Array
(
    [0] => stdClass Object
        (
            [campaigns.ID] => 33
            [campaigns.post_author] => 2
            [campaigns.post_date] => 2012-01-16 19:19:10
            [campaigns.post_date_gmt] => 2012-01-16 19:19:10
            [campaigns.post_content] => Lorem ipsum
            [campaigns.post_title] => Lorem ipsum
            [campaigns.post_excerpt] => 
            [campaigns.post_status] => publish
            [campaigns.comment_status] => closed
            [campaigns.ping_status] => closed
            [campaigns.post_password] => 
            [campaigns.post_name] => lorem-ipsum
            [campaigns.to_ping] => 
            [campaigns.pinged] => 
            [campaigns.post_modified] => 2012-01-16 21:01:55
            [campaigns.post_modified_gmt] => 2012-01-16 21:01:55
            [campaigns.post_content_filtered] => 
            [campaigns.post_parent] => 0
            [campaigns.guid] => http://example.com/?p=33
            [campaigns.menu_order] => 0
            [campaigns.post_type] => campaign
            [campaigns.post_mime_type] => 
            [campaigns.comment_count] => 0
            [venues.ID] => 84
            [venues.post_author] => 2
            [venues.post_date] => 2012-01-16 20:12:05
            [venues.post_date_gmt] => 2012-01-16 20:12:05
            [venues.post_content] => Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
            [venues.post_title] => Lorem ipsum venue
            [venues.post_excerpt] => 
            [venues.post_status] => publish
            [venues.comment_status] => closed
            [venues.ping_status] => closed
            [venues.post_password] => 
            [venues.post_name] => lorem-ipsum-venue
            [venues.to_ping] => 
            [venues.pinged] => 
            [venues.post_modified] => 2012-01-16 20:53:37
            [venues.post_modified_gmt] => 2012-01-16 20:53:37
            [venues.post_content_filtered] => 
            [venues.post_parent] => 0
            [venues.guid] => http://example.com/?p=84
            [venues.menu_order] => 0
            [venues.post_type] => venue
            [venues.post_mime_type] => 
            [venues.comment_count] => 0
        )
)

13

শুধুমাত্র ডাটাবেসের আমি যে এই SQLite হবে তখন আপনি কনফিগার সেটিংসের উপর ভিত্তি করে না জানি PRAGMA full_column_namesএবং PRAGMA short_column_namesHttp://www.sqlite.org/pragma.html দেখুন

অন্যথায় আমি যা বলতে পারি তা হ'ল কলামের নামের পরিবর্তে অর্ডিনাল পজিশনে ফলাফল হিসাবে কলামগুলি আনা, যদি আপনার ক্যোয়ারিতে কলামগুলির নাম লিখতে আপনার পক্ষে খুব বেশি সমস্যা হয়।

এটি কেন ব্যবহারের খারাপ অভ্যাসের এটিরSELECT * একটি ভাল উদাহরণ - কারণ শেষ পর্যন্ত আপনার যে কোনওভাবেই সমস্ত কলামের নাম লিখতে হবে।

নাম বা অবস্থান পরিবর্তিত হতে পারে এমন কলামগুলিকে সমর্থন করার প্রয়োজনীয়তাটি আমি বুঝতে পেরেছি, তবে ওয়াইল্ডকার্ড ব্যবহার করা আরও শক্ত , সহজ নয়।


2
মনে রাখবেন যে, উভয় full_column_namesএবং short_column_namesকরছে অবচিত SQLite হবে।
ইসানায়ে

6

আমি ওপির মতো একই নৌকায় আছি - আমি যোগদান করছি এমন 3 টি আলাদা টেবিল থেকে আমার কয়েক ডজন ক্ষেত্র রয়েছে, যার কয়েকটিটির একই নাম (যেমন আইডি, নাম, ইত্যাদি) রয়েছে। আমি প্রতিটি ক্ষেত্রের তালিকা করতে চাই না, সুতরাং আমার সমাধানটি হ'ল একটি নাম ভাগ করে নেওয়ার ক্ষেত্রগুলি এবং যেগুলির অনন্য নাম রয়েছে তাদের জন্য নির্বাচন করুন * ব্যবহার করুন alias

উদাহরণ স্বরূপ :

টেবিল এ: আইডি, নাম, ফিল্ড 1, ফিল্ড 2 ...

টেবিল বি: আইডি, নাম, ফিল্ড 3, ফিল্ড 4 ...

এইড হিসাবে এইড নির্বাচন করুন, নাম হিসাবে একটি নাম, ক। *, বি.আইডি হিসাবে বি.আইডি, বি নাম হিসাবে বি। নাম, খ। * .....

ফলাফল অ্যাক্সেস করার সময় আমি এই ক্ষেত্রগুলির জন্য প্রবণতাযুক্ত নামগুলি এবং "মূল" নামগুলি উপেক্ষা করি।

সম্ভবত সেরা সমাধান না হলেও এটি আমার পক্ষে কাজ করে .... আমি মাইএসকিএল ব্যবহার করি


5

ডিফেরেন্ট ডাটাবেস পণ্যগুলি আপনাকে বিভিন্ন উত্তর দেবে; তবে আপনি যদি খুব দূরে বহন করেন তবে আপনি নিজেকে আঘাতের জন্য সেট আপ করছেন। আপনি যে কলামগুলি চান তা বেছে নেওয়া এবং তাদের নিজের নিজস্ব উপাধি দেওয়ার চেয়ে আপনি আরও ভাল so


1
পয়েন্ট নেওয়া হয়েছে, তবে এখানে আমার লক্ষ্যটি খুব সাধারণ বিষয়, সুতরাং সুস্পষ্ট না হওয়া কোনও সমস্যা নয়। বস্তুত, নির্দিষ্ট হতে থাকার করবে একটি সমস্যা হতে।
ফক্সডোনট

নীচে আরও জমা দেখুন। ডট.নোটেশন ব্যবহার করতে পারবেন যা সম্ভবত আপনি ডিফল্ট হবেন?
dkretz

এটি পাঠযোগ্যতার জন্য গুরুত্বপূর্ণ। আমি এখনই এটি করার জন্য আশা করছিলাম কারণ আমার কাছে সিটিই প্রক্রিয়াধীন রয়েছে। প্রাক্তন। CTE_A -> CTE_B -> CTE_C -> CTE_D -> নির্বাচন করুন / সন্নিবেশ করানোর জন্য চূড়ান্ত নির্বাচনের বিবৃতি এবং কার্যকারিতা বিবেচনা না করা পর্যন্ত আমি যে কলামগুলি চাই তা নির্দিষ্ট করার দরকার নেই।
থমাস রোনস

5

অনুশীলনে এই প্রশ্নটি বেশ কার্যকর। সফ্টওয়্যার প্রোগ্রামিংয়ে প্রতিটি স্পষ্ট কলাম তালিকাভুক্ত করার জন্য এটি কেবল প্রয়োজনীয়, যেখানে আপনি সমস্ত শর্তাদি মোকাবেলায় বিশেষ যত্নবান হন।

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

সাধারণত আমি কলাম নামগুলির উপসর্গযুক্ত একটি ইউটিলিটি ভিউ তৈরি করব, এখানে pl / pgsql এ ফাংশন রয়েছে, এটি সহজ নয় তবে আপনি এটি অন্যান্য পদ্ধতির ভাষায় রূপান্তর করতে পারেন।

-- Create alias-view for specific table.

create or replace function mkaview(schema varchar, tab varchar, prefix varchar)
    returns table(orig varchar, alias varchar) as $$
declare
    qtab varchar;
    qview varchar;
    qcol varchar;
    qacol varchar;
    v record;
    sql varchar;
    len int;
begin
    qtab := '"' || schema || '"."' || tab || '"';
    qview := '"' || schema || '"."av' || prefix || tab || '"';
    sql := 'create view ' || qview || ' as select';

    for v in select * from information_schema.columns
            where table_schema = schema and table_name = tab
    loop
        qcol := '"' || v.column_name || '"';
        qacol := '"' || prefix || v.column_name || '"';

        sql := sql || ' ' || qcol || ' as ' || qacol;
        sql := sql || ', ';

        return query select qcol::varchar, qacol::varchar;
    end loop;

    len := length(sql);
    sql := left(sql, len - 2); -- trim the trailing ', '.
    sql := sql || ' from ' || qtab;

    raise info 'Execute SQL: %', sql;
    execute sql;
end
$$ language plpgsql;

উদাহরণ:

-- This will create a view "avp_person" with "p_" prefix to all column names.
select * from mkaview('public', 'person', 'p_');

select * from avp_person;

3

সদৃশ ক্ষেত্রের নামগুলি সম্পর্কে আপনার সমস্যাটি আমি পুরোপুরি বুঝতে পারি।

এটির সমাধান করার জন্য আমার নিজের ফাংশনটি কোড না করা পর্যন্ত আমারও এটি দরকার ছিল। আপনি যদি পিএইচপি ব্যবহার করেন তবে আপনি এটি ব্যবহার করতে পারেন, বা আপনার নিম্নলিখিত ভাষা ব্যবহারের জন্য আপনি যে ভাষাটি ব্যবহার করছেন সেটি কোড করতে পারেন।

এখানে কৌশলটি হ'ল mysql_field_table()ফলটির mysql_field_name()প্রতিটি সারিটির জন্য টেবিলের নাম এবং ক্ষেত্রটি ফিরে আসে যদি আপনি এটি mysql_num_fields()একটি নতুন অ্যারেতে মিশ্রিত করতে পারেন mix

এটি সমস্ত কলামের উপসর্গ করে;)

শুভেচ্ছা সহ,

function mysql_rows_with_columns($query) {
    $result = mysql_query($query);
    if (!$result) return false; // mysql_error() could be used outside
    $fields = mysql_num_fields($result);
    $rows = array();
    while ($row = mysql_fetch_row($result)) { 
        $newRow = array();
        for ($i=0; $i<$fields; $i++) {
            $table = mysql_field_table($result, $i);
            $name = mysql_field_name($result, $i);
            $newRow[$table . "." . $name] = $row[$i];
        }
        $rows[] = $newRow;
    }
    mysql_free_result($result);
    return $rows;
}

2

এর জন্য কোনও এসকিউএল স্ট্যান্ডার্ড নেই।

তবে কোড জেনারেশনের মাধ্যমে (টেবিলগুলি তৈরি হওয়ার সাথে সাথে পরিবর্তিত হয় অথবা রানটাইম হিসাবে চাহিদা অনুযায়ী) আপনি এটি খুব সহজেই করতে পারেন:

CREATE TABLE [dbo].[stackoverflow_329931_a](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [col2] [nchar](10) NULL,
    [col3] [nchar](10) NULL,
    [col4] [nchar](10) NULL,
 CONSTRAINT [PK_stackoverflow_329931_a] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[stackoverflow_329931_b](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [col2] [nchar](10) NULL,
    [col3] [nchar](10) NULL,
    [col4] [nchar](10) NULL,
 CONSTRAINT [PK_stackoverflow_329931_b] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

DECLARE @table1_name AS varchar(255)
DECLARE @table1_prefix AS varchar(255)
DECLARE @table2_name AS varchar(255)
DECLARE @table2_prefix AS varchar(255)
DECLARE @join_condition AS varchar(255)
SET @table1_name = 'stackoverflow_329931_a'
SET @table1_prefix = 'a_'
SET @table2_name = 'stackoverflow_329931_b'
SET @table2_prefix = 'b_'
SET @join_condition = 'a.[id] = b.[id]'

DECLARE @CRLF AS varchar(2)
SET @CRLF = CHAR(13) + CHAR(10)

DECLARE @a_columnlist AS varchar(MAX)
DECLARE @b_columnlist AS varchar(MAX)
DECLARE @sql AS varchar(MAX)

SELECT @a_columnlist = COALESCE(@a_columnlist + @CRLF + ',', '') + 'a.[' + COLUMN_NAME + '] AS [' + @table1_prefix + COLUMN_NAME + ']'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table1_name
ORDER BY ORDINAL_POSITION

SELECT @b_columnlist = COALESCE(@b_columnlist + @CRLF + ',', '') + 'b.[' + COLUMN_NAME + '] AS [' + @table2_prefix + COLUMN_NAME + ']'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table2_name
ORDER BY ORDINAL_POSITION

SET @sql = 'SELECT ' + @a_columnlist + '
,' + @b_columnlist + '
FROM [' + @table1_name + '] AS a
INNER JOIN [' + @table2_name + '] AS b
ON (' + @join_condition + ')'

PRINT @sql
-- EXEC (@sql)

এটি কাজ করবে তবে প্রশ্নটি বরং নির্বোধ। কেন শুধু ইউনিয়ন বা উপ-কোয়েরি করবেন না। আপনি কেন যোগদান করবেন এবং এখনও কলামের নামগুলিতে সারণী উপসর্গ চান?
D3vtr0n

কেড: তথ্যের জন্য ধন্যবাদ, এটি আকর্ষণীয়। দুর্ভাগ্যক্রমে, ডাটাবেস তৈরি / পরিবর্তন আমার ক্ষেত্রে কোনও বিকল্প নয়। ডেভট্রন: আপনি যদি কোনও তথ্য থেকে কোনও বস্তুর বিভিন্ন বৈশিষ্ট্যে ফিরে আসা তথ্য ম্যাপ করার চেষ্টা করছেন, তথ্যটি খুব দরকারী হয়ে ওঠে।
ফক্সডোনট

1
কখনও কখনও বিভিন্ন টেবিলের কলামের নাম একই হয় তবে একই মান থাকে না। সুতরাং ভিউ বা উত্পন্ন টেবিলগুলিতে তাদের আলাদা করার জন্য তাদের উপসর্গের প্রয়োজন (যার অবশ্যই সমস্ত অনন্য কলামের নাম থাকতে হবে)।
কেড রক্স

@ ফ্রেডেরিক, আপনার কোডটি কোথাও থাকতে হবে - এটি কেবল কোড উত্পন্ন করে। আবার, এটি একবার ডেভলপমেন্ট চলাকালীন বা গতিশীলভাবে রান সময়ে করা যায়।
কেড রক্স

1

এটি পুনরায় ব্যবহারযোগ্য উপায়ে ঘটানোর জন্য আমি দুটি উপায় ভাবতে পারি। একটি হ'ল আপনার সমস্ত কলামগুলি যে টেবিল থেকে এসেছে সেটির উপসর্গ দিয়ে তার নতুন নামকরণ করুন। আমি এটি বহুবার দেখেছি, তবে আমি সত্যিই এটি পছন্দ করি না। আমি দেখতে পেলাম যে এটি অনর্থক, প্রচুর টাইপিংয়ের কারণ এবং আপনি যখনই কোনও কলামের নামটি অস্পষ্ট হয়ে ওঠার প্রয়োজন হয় তখন আপনি সর্বদা ডাকনাম ব্যবহার করতে পারেন।

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

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


"পরিশেষে, আমি স্পষ্ট নই যে কেন প্রতিটি কলামে কোন টেবিলটি এসেছে তা আপনার জানা দরকার this এই বিষয়টি কী?" <- 11 বছর পরে, একটি ব্যবহারের ক্ষেত্রে গো স্ট্রাক স্ক্যানিং হয়।
লি বেনসন

1

অথবা আপনি রেড গেট এসকিউএল রিফ্যাক্টর বা এসকিউএল প্রম্পট ব্যবহার করতে পারেন যা ট্যাব বোতামের একটি ক্লিকের সাহায্যে কলাম তালিকায় আপনার নির্বাচন * প্রসারিত করে

সুতরাং আপনার ক্ষেত্রে, আপনি যদি একটি যোগ বি থেকে নির্বাচন করুন * টাইপ করেন ... * এর শেষে যান, ট্যাব বোতাম, ভয়েলা! আপনি এ-বি B এর মধ্য থেকে নির্বাচন করুন AOLOL1 1, এ। কলাম 2, ...., বি কলাম 1, বি। কলাম 2 দেখতে পাবেন 2

যদিও এটি নিখরচায় নয়


1

এটি বিন্যাস ছাড়াই এটি করুন, কেবল কারণ, যেখানে আপনি যে ক্ষেত্রের সাথে যোগ দিচ্ছেন সেই ক্ষেত্রটি 2 বা 3 টেবিলগুলিতে উপস্থিত থাকলে আপনি কীভাবে এমন একটি ক্ষেত্রের রেফারেন্স করবেন? আপনি কোনটিকে রেফারেন্স দেওয়ার চেষ্টা করছেন তা mysql- এর জন্য অস্পষ্ট হবে।


1

আমি জড়িত টেবিলের ক্ষেত্রগুলির নাম পরিবর্তন করে আমার একই ধরণের সমস্যার সমাধান করেছি। হ্যাঁ, আমি এটি করার সুযোগ পেয়েছি এবং বুঝতে পেরেছি যে প্রত্যেকেরই এটি নাও থাকতে পারে। আমি সারণীর নাম উপস্থাপন করে একটি সারণীর মধ্যে প্রতিটি ক্ষেত্রের উপসর্গ যুক্ত করেছি। সুতরাং ওপি পোস্ট করা এসকিউএল অপরিবর্তিত থাকবে -

SELECT a.*, b.* FROM TABLE_A a JOIN TABLE_B b USING (some_id);

এবং এখনও প্রত্যাশিত ফলাফলগুলি দিন - আউটপুট ক্ষেত্রগুলি কোন টেবিলের অন্তর্ভুক্ত তা চিহ্নিতকরণের স্বাচ্ছন্দ্য।


0

নির্বাচন করুন * সাধারণত খারাপ কোড তৈরি করে, কারণ নতুন কলামগুলি টেবিলগুলিতে যুক্ত হতে বা কলামের ক্রমগুলি প্রায়শই ঘন ঘন পরিবর্তিত হয় যা সাধারণত খুব সূক্ষ্ম উপায়ে নির্বাচনকে * বিরতি দেয়। সুতরাং কলামগুলি তালিকাভুক্ত করা সঠিক সমাধান।

আপনার ক্যোয়ারীটি কীভাবে করবেন, মাইএসকিএল সম্পর্কে নিশ্চিত নয় তবে স্কেলসার্ভারে আপনি সাইকোলোমগুলি থেকে কলামের নামগুলি নির্বাচন করতে এবং নির্বাচনকে বেছে বেছে বেছে নিতে পারেন।


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

5
সিস্কলমগুলি থেকে গতিশীলভাবে একটি নির্বাচনী বিবৃতি তৈরির জন্য নির্বাচন করা একটি ভয়ানক হ্যাক, এবং আমি এটির উত্পাদনের প্রস্তাব দেব না।
জুলিয়েট

0

যদি স্কিমা পরিবর্তনের বিষয়ে উদ্বিগ্ন হয় তবে এটি আপনার পক্ষে কাজ করতে পারে: ১. জড়িত সমস্ত টেবিলগুলিতে একটি 'ডিসক্রিবি টেবিল' কোয়েরি চালান। ২. আপনার নির্বাচিত উপনামের সাথে উপসর্গযুক্ত কলামের নামের একটি স্ট্রিং গতিশীলরূপে নির্মাণের জন্য ফেরত ক্ষেত্রের নামগুলি ব্যবহার করুন।


0

যারা মাইএসকিউএল সি-এপিআই ব্যবহার করেন তাদের জন্য আপনার প্রশ্নের সরাসরি উত্তর রয়েছে।

এসকিউএল দেওয়া:

  SELECT a.*, b.*, c.* FROM table_a a JOIN table_b b USING (x) JOIN table_c c USING (y)

'Mysql_stmt_result_metadata ()' এর ফলাফলগুলি MYSQL_FIELD [] কাঠামোর জন্য আপনার প্রস্তুত এসকিউএল কোয়েরি থেকে আপনার ক্ষেত্রগুলির সংজ্ঞা দেয়। প্রতিটি ক্ষেত্রে নিম্নলিখিত তথ্য থাকে:

  char *name;                 /* Name of column (may be the alias) */
  char *org_name;             /* Original column name, if an alias */
  char *table;                /* Table of column if column was a field */
  char *org_table;            /* Org table name, if table was an alias */
  char *db;                   /* Database for table */
  char *catalog;              /* Catalog for table */
  char *def;                  /* Default value (set by mysql_list_fields) */
  unsigned long length;       /* Width of column (create length) */
  unsigned long max_length;   /* Max width for selected set */
  unsigned int name_length;
  unsigned int org_name_length;
  unsigned int table_length;
  unsigned int org_table_length;
  unsigned int db_length;
  unsigned int catalog_length;
  unsigned int def_length;
  unsigned int flags;         /* Div flags */
  unsigned int decimals;      /* Number of decimals in field */
  unsigned int charsetnr;     /* Character set */
  enum enum_field_types type; /* Type of field. See mysql_com.h for types */

ক্ষেত্রগুলি লক্ষ্য করুন: ক্যাটালগ, টেবিল, org_name

আপনি এখন জানেন যে আপনার এসকিউএল এর কোন ক্ষেত্রগুলি কোন স্কিমা (ওরফে ক্যাটালগ) এবং সারণীর অন্তর্ভুক্ত। মাল্টি-টেবিল স্কেল কোয়েরি থেকে প্রতিটি ক্ষেত্রকে সাধারণভাবে শনাক্ত করার জন্য এটি যথেষ্ট নয়, কোনও কিছুর নাম না রেখেই।

সত্যিকারের পণ্য স্কেলওয়াইওজি এই ম্যানরটিতে এই সঠিক ডেটা ব্যবহার করতে দেখানো হয় যে তারা যখন পিকে ক্ষেত্র উপস্থিত থাকে, তখন একটি বহু-টেবিলের যোগদানের প্রতিটি টেবিলটি স্বাধীনভাবে আপডেট করতে সক্ষম হয়।


0

এই সমাধান থেকে বিকাশ , আমি এইভাবে সমস্যাটির কাছে যাব:

প্রথমে সমস্ত ASবিবৃতিগুলির একটি তালিকা তৈরি করুন :

DECLARE @asStatements varchar(8000)

SELECT @asStatements = ISNULL(@asStatements + ', ','') + QUOTENAME(table_name) + '.' + QUOTENAME(column_name) + ' AS ' + '[' + table_name + '.' + column_name + ']'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TABLE_A' OR TABLE_NAME = 'TABLE_B'
ORDER BY ORDINAL_POSITION

তারপরে এটি আপনার ক্যোয়ারিতে ব্যবহার করুন:

EXEC('SELECT ' + @asStatements + ' FROM TABLE_A a JOIN TABLE_B b USING (some_id)');

তবে, এটির জন্য সংশোধন প্রয়োজন হতে পারে কারণ অনুরূপ কিছু কেবল এসকিউএল সার্ভারে পরীক্ষা করা হয়। কিন্তু এই কোডটি এসকিউএল সার্ভারে হুবহু কাজ করে না কারণ USING সমর্থিত নয়।

আপনি উদাহরণস্বরূপ মাইএসকিউএল জন্য এই কোডটি পরীক্ষা / সংশোধন করতে পারছেন কিনা দয়া করে মন্তব্য করুন।


0

সম্প্রতি নোডজেএস এবং পোস্টগ্রিসে এই সমস্যাটি ছড়িয়ে পড়ে।

ES6 পদ্ধতির

আমার জানা কোনও আরডিবিএমএস বৈশিষ্ট্য নেই যা এই কার্যকারিতা সরবরাহ করে, তাই আমি আমার সমস্ত ক্ষেত্র যুক্ত একটি বস্তু তৈরি করেছি, যেমন:

const schema = { columns: ['id','another_column','yet_another_column'] }

একটি টেবিলের নামের সাথে স্ট্রিংগুলি একত্রে সংযোজন করতে একটি হ্রাসকারীকে সংজ্ঞায়িত করা হয়েছে:

const prefix = (table, columns) => columns.reduce((previous, column) => {
  previous.push(table + '.' + column + ' AS ' + table + '_' + column);
  return previous;
}, []);

এটি স্ট্রিংগুলির একটি অ্যারে প্রদান করে। প্রতিটি টেবিলের জন্য এটি কল করুন এবং ফলাফলগুলি একত্রিত করুন:

const columns_joined = [...prefix('tab1',schema.columns), ...prefix('tab2',schema.columns)];

চূড়ান্ত এসকিউএল স্টেটমেন্ট আউটপুট:

console.log('SELECT ' + columns_joined.join(',') + ' FROM tab1, tab2 WHERE tab1.id = tab2.id');

কোনভাবেই না! এটি কিছু হ্যাকি এসকিউএল ইঞ্জেকশন, এবং প্রকাশের সাথে কাজ করে না।
রতিজাস

0

আমি নোডে ডামি বা সেন্ডিনেল কলামগুলি ব্যবহারের পরামর্শের উপর ভিত্তি করে একটি সমাধান কার্যকর করেছি । আপনি এটি এসকিউএল তৈরি করে ব্যবহার করবেন:

select 
    s.*
  , '' as _prefix__creator_
  , u.*
  , '' as _prefix__speaker_
  , p.*
from statements s 
  left join users u on s.creator_user_id = u.user_id
  left join persons p on s.speaker_person_id = p.person_id

এবং তারপরে সারিটি পোস্ট-প্রসেসিং করে আপনি নিজের ডাটাবেস ড্রাইভারের মতো ফিরে পান addPrefixes(row)

বাস্তবায়ন ( আমার ড্রাইভার দ্বারা ফিরে fields/ rowsফিরে আসার ভিত্তিতে , তবে অন্যান্য ডিবি ড্রাইভারদের জন্য পরিবর্তন করা সহজ হওয়া উচিত):

const PREFIX_INDICATOR = '_prefix__'
const STOP_PREFIX_INDICATOR = '_stop_prefix'

/** Adds a <prefix> to all properties that follow a property with the name: PREFIX_INDICATOR<prefix> */
function addPrefixes(fields, row) {
  let prefix = null
  for (const field of fields) {
    const key = field.name
    if (key.startsWith(PREFIX_INDICATOR)) {
      if (row[key] !== '') {
        throw new Error(`PREFIX_INDICATOR ${PREFIX_INDICATOR} must not appear with a value, but had value: ${row[key]}`)
      }
      prefix = key.substr(PREFIX_INDICATOR.length)
      delete row[key]
    } else if (key === STOP_PREFIX_INDICATOR) {
      if (row[key] !== '') {
        throw new Error(`STOP_PREFIX_INDICATOR ${STOP_PREFIX_INDICATOR} must not appear with a value, but had value: ${row[key]}`)
      }
      prefix = null
      delete row[key]
    } else if (prefix) {
      const prefixedKey = prefix + key
      row[prefixedKey] = row[key]
      delete row[key]
    }
  }
  return row
}

টেস্ট:

const {
  addPrefixes,
  PREFIX_INDICATOR,
  STOP_PREFIX_INDICATOR,
} = require('./BaseDao')

describe('addPrefixes', () => {
  test('adds prefixes', () => {
    const fields = [
      {name: 'id'},
      {name: PREFIX_INDICATOR + 'my_prefix_'},
      {name: 'foo'},
      {name: STOP_PREFIX_INDICATOR},
      {name: 'baz'},
    ]
    const row = {
      id: 1,
      [PREFIX_INDICATOR + 'my_prefix_']: '',
      foo: 'bar',
      [STOP_PREFIX_INDICATOR]: '',
      baz: 'spaz'
    }
    const expected = {
      id: 1,
      my_prefix_foo: 'bar',
      baz: 'spaz',
    }
    expect(addPrefixes(fields, row)).toEqual(expected)
  })
})

0

আমি যা করি তা হল প্রক্রিয়াটিকে একত্রিত করতে এক্সেল ব্যবহার করা। উদাহরণস্বরূপ, প্রথমে আমি * নির্বাচন করুন এবং সমস্ত কলাম পেয়েছি, সেগুলি এক্সেলে আটকান। তারপরে আমার কলামটি ঘিরেই প্রয়োজনীয় কোডটি লিখুন। বলুন যে আমার কাছে প্রচুর কলামের বিজ্ঞাপনের দরকার ছিল। আমি কলামে আমার ক্ষেত্র এবং কলাম বিতে "পূর্বের_" এবং কলাম সিতে আমার ক্ষেত্রগুলি চাই। D কলামে আমার একটি কলাম হবে।

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


0

পোস্টগ্রিসে আমি জসন ফাংশনগুলি পরিবর্তে জসন অবজেক্টগুলি ব্যবহার করি .... তারপরে, জিজ্ঞাসা করার পরে, আমি একটি জাজোন প্রত্যয় সহ ক্ষেত্রগুলিকে জেসন_ডেকড করি।

অর্থাৎ,

select row_to_json(tab1.*),tab1_json, row_to_json(tab2.*) tab2_json 
 from tab1
 join tab2 on tab2.t1id=tab1.id

তারপরে পিএইচপি (বা অন্য কোনও ভাষায়), আমি ফিরে আসা কলামগুলি এবং json_decode () এগুলি লুপ করব যদি তাদের "_json" প্রত্যয় থাকে (প্রত্যয়টিও মুছে ফেলা হয়) শেষ পর্যন্ত, আমি "ট্যাব 1" নামে একটি অবজেক্ট পেয়েছি যার মধ্যে সমস্ত রয়েছে ট্যাব 1 ক্ষেত্র এবং অন্য "ট্যাব 2" নামে পরিচিত যা সমস্ত ট্যাব 2 ক্ষেত্রকে অন্তর্ভুক্ত করে।


-1

পিএইচপি 7.2 + মাইএসকিউএল / মারিয়াডবি

মাইএসকিউএল আপনাকে একই নামে একাধিক ক্ষেত্র প্রেরণ করবে। এমনকি টার্মিনাল ক্লায়েন্টে। তবে আপনি যদি কোনও সহযোগী অ্যারে চান তবে আপনাকে কীগুলি নিজেই তৈরি করতে হবে।

আসল জন্য @axelbrz ধন্যবাদ। আমি এটিকে নতুন পিএইচপি এ পোর্ট করেছি এবং এটি কিছুটা সাফ করেছি:

function mysqli_rows_with_columns($link, $query) {
    $result = mysqli_query($link, $query);
    if (!$result) {
        return mysqli_error($link);
    }
    $field_count = mysqli_num_fields($result);
    $fields = array();
    for ($i = 0; $i < $field_count; $i++) {
        $field = mysqli_fetch_field_direct($result, $i);
        $fields[] = $field->table . '.' . $field->name; # changed by AS
        #$fields[] = $field->orgtable . '.' . $field->orgname; # actual table/field names
    }
    $rows = array();
    while ($row = mysqli_fetch_row($result)) {
        $new_row = array();
        for ($i = 0; $i < $field_count; $i++) {
            $new_row[$fields[$i]] = $row[$i];
        }
        $rows[] = $new_row;
    }
    mysqli_free_result($result);
    return $rows;
}

$link = mysqli_connect('localhost', 'fixme', 'fixme', 'fixme');
print_r(mysqli_rows_with_columns($link, 'select foo.*, bar.* from foo, bar'));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.