ডাটাবেসের মধ্যে অনন্য সূচিবদ্ধ কলাম মানগুলিকে সোয়াপ করুন

আমার একটি ডাটাবেস টেবিল আছে এবং ক্ষেত্রের একটি (প্রাথমিক কী নয়) এটি একটি অনন্য সূচী আছে। এখন আমি এই কলামের নীচে দুটি সারি জন্য মান স্যুইপ করতে চান। কিভাবে এটি করা হতে পারে? দুটি হ্যাক আমি জানি:

  1. উভয় সারি মুছুন এবং পুনরায় সন্নিবেশ করান
  2. কিছু অন্যান্য মান সঙ্গে সারি আপডেট এবং সোয়াপ এবং তারপর প্রকৃত মান আপডেট করুন।

কিন্তু আমি এই জন্য যেতে চান না কারণ তারা সমস্যা সঠিক সমাধান বলে মনে হচ্ছে না। কেউ কি আমাকে সাহায্য করতে পারে?

0
যোগ সম্পাদিত
মতামত: 1
কলামের নাম পরিবর্তন করবেন?
যোগ লেখক MatBailie, উৎস

19 উত্তর

GDAL user-friendliness is basically nonexistent, but hot damn does it ever work well. I wrote up this guide to my own georeferencing experiments a few years ago: http://mike.teczno.com/notes/flea-market-mapping.html

এটি একটি বিট আউট তারিখ, কিন্তু মৌলিক উপাদান আছে: আপনার ইমেজ এবং একটি রেফারেন্স মানচিত্র মধ্যে মিল খুঁজে পয়েন্ট (আমি এখন সুপারিশ চাই http://getlatlon com http://gorissen.info ) এ একটিকে সমর্থন করুন, gdal_translate ব্যবহার করুন একটি ভার্চুয়াল রাস্টারের জন্য, এবং তারপর আপনি ' মূলত এই অর্থে সম্পূর্নভাবে সম্পন্ন হয়েছে যে, ফলে VRT ফাইলটি GeoTIFF বা আপনার পছন্দের টাইলটিতে রূপান্তরিত হতে পারে।

I'm doing a lot with this right now, including collaborating with Tim Waters on the excellent server-side Map Warper mentioned in this thread, so there may be some new stuff in the near future loosely based on some experiments I did in JS last year: http://mike.teczno.com/notes/canvas-warp.html

22
যোগ
মিকাল, খুব শান্ত ধন্যবাদ! আমি কিভাবে পিক্সেলের অবস্থানটি খুঁজে বের করতে উদ্বিগ্ন ছিলাম এবং আপনি উল্লেখ করেছেন যে আপনি ফটোশপের তথ্য প্যালেট ব্যবহার করেছেন, যা সহায়ক। আমি মনে করি আমি 1 ম আদেশ রূপান্তর ব্যবহার করে দূরে পেতে পারেন। সব তথ্যের জন্য ধন্যবাদ!
যোগ লেখক TiTi, উৎস
QGIS 1.5 রিলিজ হয়েছে এবং চেন্জেলোগের মাধ্যমে দেখতে পেয়েছে ( qgis.org/ এন/কম্পোনেন্ট/কনটেন্ট/আর্টিকেল/108.html ) আমি লক্ষ্য করেছি যে "জিডিএএল রাস্টার টুলগুলি প্লাগ ইন QGIS কোর"।
যোগ লেখক TiTi, উৎস

আমি দুই ওয়েব ভিত্তিক সমাধান সম্পর্কে জানতে পারি যা দেখার জন্য মূল্য দিতে পারে:

আমি চমত্কার নিশ্চিত টিম ওয়াটারস তার কোড sourced খোলা, তাই এই বিশেষ সরঞ্জাম আপনার প্রয়োজন অনুসারে না, এমনকি যদি, তাদের উত্স দেখতে আপনি কিছু অন্তর্দৃষ্টি দিতে পারে।

দুঃখিত, আমি একাধিক বহিরাগত লিঙ্ক পোস্ট করতে পারি না কারণ আমি দৃশ্যত কম সম্মানজনক

10
যোগ
আপনি এখন আরও লিঙ্ক যোগ করতে সক্ষম হতে হবে :)
যোগ লেখক Greg, উৎস
মজার ব্যাপার হল, আমি অন্য দিন আবার MapWarper দিকে তাকিয়ে ছিলাম। উৎসটি GitHub: github.com/timwaters/mapwarper
যোগ লেখক cynicalman, উৎস

আমি QGis এর georeferencer খুঁজে পেতে একটি বিন্দু জন্য সুন্দর এবং টুল ক্লিক করুন। আমি একটি সামান্য গাইড লিখেছিলাম - QGIS- এর সাথে ছবির জিরোফেরেন্সিং - যা সামান্য কানাডিয়ান ডেটা- উত্স নির্দিষ্ট, কিন্তু QGis মধ্যে একটি অবাধ ম্যাপ পেতে প্রয়োজন সব পদক্ষেপ মাধ্যমে পদচারনা

7
যোগ

আমি QGis এর georeferencer খুঁজে পেতে একটি বিন্দু জন্য সুন্দর এবং টুল ক্লিক করুন। আমি একটি সামান্য গাইড লিখেছিলাম - QGIS- এর সাথে ছবির জিরোফেরেন্সিং - যা সামান্য কানাডিয়ান ডেটা- উত্স নির্দিষ্ট, কিন্তু QGis মধ্যে একটি অবাধ ম্যাপ পেতে প্রয়োজন সব পদক্ষেপ মাধ্যমে পদচারনা

7
যোগ

আপনি MapWindow এ চিত্র সংশোধনকারী প্লাগ-ইন ব্যবহার করতে পারেন। এটি একটি উন্নত 4 বা 6 বিন্দু আলগোরিদিম ব্যবহার করে।

2
যোগ

আপনি MapWindow এ চিত্র সংশোধনকারী প্লাগ-ইন ব্যবহার করতে পারেন। এটি একটি উন্নত 4 বা 6 বিন্দু আলগোরিদিম ব্যবহার করে।

2
যোগ

যেহেতু আপনি বায়বীয় ইমেজ ব্যবহার করছেন: আপনি অস্থায়ীকরণ প্রয়োজন? যে ক্ষেত্রে আমি ILWIS আপনার সেরা বিট হবে অনুমান, যদিও GRASS এটি সমর্থন করে (আমি নিজেকে যদিও চেষ্টা করা হয়নি)।

ILWIS জন্য কাজ প্রবাহ এখানে বর্ণিত হয়: http://spatial-analyst.net/PDF/TN_Ortofoto_in_ILWIS.pdf

2
যোগ
গ্রাস অরথোরেটিকেশন ওয়ার্কফ্লো এখানে পাওয়া যায়: grassbook.org -> বাম মেনু -> নমুনা অধ্যায়: -> বায়বীয় + ORTHO (পিডিএফ)
যোগ লেখক Dag Haavi Finstad, উৎস

OpenEV FWTools এর সাথে আসে, আমার কাছে ঠিক মনে হয় কিন্তু আমি সহজেই QGIS এ 300 মেগাবাইট ছবি লোড করি এবং সেখানে তাদের সাথে মোকাবেলা করি। তাই আমি এটি নৈমিত্তিক ব্যবহারের থেকে শুধুমাত্র সুপারিশ করতে পারেন

http://OpenEV.sourceforge.net

এনআইটিএফ অন্তর্ভুক্ত

এবং GDAL দিয়ে নির্মিত হয়

1
যোগ

আপনি যদি আপনার ইমেজটির জন্য * .jim ফাইল তৈরি বা তৈরি করতে পারেন, তাহলে আপনি আপনার ইমেজটি কক্ষপথ সংশোধন করতে অরথোইজেন ব্যবহার করতে পারেন।

1
যোগ

আমি মনে করি যে # 2 সেরা বিট, যদিও আমি এটি একটি লেনদেনের মধ্যে এটি আবৃত নিশ্চিত করা হবে যদি কিছু ভুল আপডেট আপ ভুল।

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

0
যোগ

ওরাকলের জন্য একটি বিকল্প আছে, ডিফারড, কিন্তু আপনাকে এটি আপনার সীমাবদ্ধতাতে যুক্ত করতে হবে।

SET CONSTRAINT emp_no_fk_par DEFERRED; 

সমস্ত সীমাবদ্ধতাগুলি যে পুরো অধিবেশনের সময় deferrable হয় মুলতুবি করার জন্য, আপনি ALTER SESSION SET সীমাবদ্ধতা = ডিফল্ট বিবৃতি ব্যবহার করতে পারেন।

উত্স

0
যোগ

ওরাকল এক্সারফ্রন্ট অখণ্ডতা চেকিং যা ঠিক এইটি সমাধান করে দেয়, কিন্তু এটি SQL সার্ভার বা মাইএসকিউএল

0
যোগ

এসকিউএল সার্ভারে, এমারজ়া স্টেটমেন্ট সারিগুলি আপডেট করতে পারে যা সাধারণভাবে একটি অনন্য কী / ইন্ডেক্স ভেঙ্গে যাবে। (শুধু কৌতূহল ছিল কারণ এটি পরীক্ষা।)

যাইহোক, আপনি একটি temp টেবিল / পরিবর্তনশীল ব্যবহার করতে হবে MERGE w / প্রয়োজনীয় সারি সরবরাহ।

0
যোগ

জাদু শব্দটি দুর্বল এখানে:

DROP TABLE ztable CASCADE;
CREATE TABLE ztable
    ( id integer NOT NULL PRIMARY KEY
    , payload varchar
    );
INSERT INTO ztable(id,payload) VALUES (1,'one' ), (2,'two' ), (3,'three' );
SELECT * FROM ztable;


    -- This works, because there is no constraint
UPDATE ztable t1
SET payload=t2.payload
FROM ztable t2
WHERE t1.id IN (2,3)
AND t2.id IN (2,3)
AND t1.id <> t2.id
    ;
SELECT * FROM ztable;

ALTER TABLE ztable ADD CONSTRAINT OMG_WTF UNIQUE (payload)
    DEFERRABLE INITIALLY DEFERRED
    ;

    -- This should also work, because the constraint 
    -- is deferred until "commit time"
UPDATE ztable t1
SET payload=t2.payload
FROM ztable t2
WHERE t1.id IN (2,3)
AND t2.id IN (2,3)
AND t1.id <> t2.id
    ;
SELECT * FROM ztable;

ফলাফলটি জেনে নিন:

DROP TABLE
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "ztable_pkey" for table "ztable"
CREATE TABLE
INSERT 0 3
 id | payload
----+---------
  1 | one
  2 | two
  3 | three
(3 rows)

UPDATE 2
 id | payload
----+---------
  1 | one
  2 | three
  3 | two
(3 rows)

NOTICE:  ALTER TABLE / ADD UNIQUE will create implicit index "omg_wtf" for table "ztable"
ALTER TABLE
UPDATE 2
 id | payload
----+---------
  1 | one
  2 | two
  3 | three
(3 rows)
0
যোগ
মাইএসকিউএল এই কাজ করে?
যোগ লেখক Marco Demaio, উৎস
@ মারকো ডাইমাইও আমি জানি না আমি ভয় পাই না: যেহেতু মাইএসকিউএল স্ব-যোগদান থেকে আপডেটের অনুমতি দেয় না, আমি অনুমান করি যে এটি নোংরাভাবে পড়ে। কিন্তু আপনি চেষ্টা করতে পারেন ...
যোগ লেখক wildplasser, উৎস
পরিষ্কার, সহজ এবং সুন্দর কাজ করে, ধন্যবাদ মানুষ :)
যোগ লেখক Aldos, উৎস

আমি একই সমস্যা আছে। এখানে PostgreSQL এ আমার প্রস্তাবিত পদ্ধতি। আমার ক্ষেত্রে, আমার অনন্য সূচকটি একটি ক্রম মান, আমার সারিগুলিতে একটি স্পষ্ট ব্যবহারকারীর ক্রম নির্ধারণ করে। ব্যবহারকারী একটি ওয়েব অ্যাপে সারি চারপাশে ছিটকে ফেলবেন, তারপর পরিবর্তন জমা দিন।

আমি একটি "আগে" ট্রিগার যোগ করার পরিকল্পনা করছি। যে ট্রিগারে, যখনই আমার অনন্য সূচক মান আপডেট করা হয়, আমি অন্য কোনও সারি ইতিমধ্যে আমার নতুন মান ঝুলি কিনা তা দেখতে হবে। যদি তাই হয়, আমি তাদের পুরানো মূল্য দিতে হবে, এবং কার্যকরভাবে তাদের বন্ধ মূল্য চুরি।

আমি আশা করছি যে PostgreSQL আমাকে এই ট্রিগারটি করার আগে ট্রিগার শুরু করবে।

আমি পোস্ট করব এবং আপনাকে আমার মাইলেজ সম্পর্কে জানাব।

0
যোগ

ধরুন আপনি আপডেট করতে চান এমন দুটি সারির পি কে জানেন ... এটি SQL সার্ভারে কাজ করে, অন্য পণ্যগুলির জন্য কথা বলতে পারে না। এসকিউএল (হতে অনুমিত) পারমাণবিক স্তরের বিবৃতি:

CREATE TABLE testing
(
    cola int NOT NULL,
    colb CHAR(1) NOT NULL
);

CREATE UNIQUE INDEX UIX_testing_a ON testing(colb);

INSERT INTO testing VALUES (1, 'b');
INSERT INTO testing VALUES (2, 'a');

SELECT * FROM testing;

UPDATE testing
SET colb = CASE cola WHEN 1 THEN 'a'
                WHEN 2 THEN 'b'
                END
WHERE cola IN (1,2);

SELECT * FROM testing;

তাই আপনি থেকে যেতে হবে:

cola    colb
------------
1       b
2       a

করুন:

cola    colb
------------
1       a
2       b
0
যোগ
এই মাইএসকিউএল আমার জন্য কাজ না
যোগ লেখক activout.se, উৎস

আমি মনে করি আপনি সমাধান 2 জন্য যেতে হবে। আমি জানি কোন এসকিউএল রূপে কোন 'সোয়াপ' ফাংশন আছে।

আপনি যদি নিয়মিতভাবে এই কাজ করতে চান, তবে সফ্টওয়্যারের অন্যান্য অংশ এই ডেটা ব্যবহার করছে তার উপর নির্ভর করে আমি সমাধান 1 টি পরামর্শ দিচ্ছি। আপনি যত্নশীল না হন তাহলে আপনি লকিং সমস্যা থাকতে পারে

কিন্তু সংক্ষিপ্ত: আপনার প্রদান করা মানুষের তুলনায় অন্য কোন সমাধান নেই।

0
যোগ

এসকিউএল সার্ভারের সাথে কাজ করে এমন আরেকটি পদ্ধতি রয়েছে: একটি টেম্প টেবিল ব্যবহার করে আপনার UPDATE স্টেটমেন্টে এটি যোগ দিন

একই সারিতে একই সময়ে দুটি সারি থাকার কারণে সমস্যাটি ঘটে, তবে যদি আপনি উভয় সারি একই সময়ে (তাদের নতুন, অনন্য মানগুলিতে) আপডেট করেন, তাহলে কোনও বাধা লঙ্ঘন নেই।

ছদ্ম-কোড:

-- setup initial data values:
insert into data_table(id, name) values(1, 'A')
insert into data_table(id, name) values(2, 'B')

-- create temp table that matches live table
select top 0 * into #tmp_data_table from data_table

-- insert records to be swapped
insert into #tmp_data_table(id, name) values(1, 'B')
insert into #tmp_data_table(id, name) values(2, 'A')

-- update both rows at once! No index violations!
update data_table set name = #tmp_data_table.name
from data_table join #tmp_data_table on (data_table.id = #tmp_data_table.id)

এই টেকনিক জন্য ধনী এইচ ধন্যবাদ - মার্ক

0
যোগ
এটি একটি বিট পুরোনো হতে পারে কিন্তু ক্লায়েন্ট একটি নির্দিষ্ট আদেশ দ্বারা তাদের রিপোর্ট বাছাই করতে চেয়েছিলেন হিসাবে আমি আমার Silverlight অ্যাপ্লিকেশন জন্য একটি 'পুনরায় ক্রম পৃষ্ঠা' করতে চেষ্টা ছিল - আমি একটি সাজানোর কলাম যোগ করা কিন্তু এটি একটি অনন্য কী আমি ছিল এটি আপডেট করার জন্য সমস্যা হচ্ছে। আমি একটি টেবিলের ভেরিয়েবল ব্যবহার করে শেষ কিন্তু নীতিটি একই (আমি সৎ হতে অনেক সময় টেম্প টেবিল পছন্দ করি না!)। ধারণা জন্য ধন্যবাদ :)
যোগ লেখক Charleh, উৎস

আমি সাধারণত একটি মান মনে করি যে আমার টেবিলে কোনো সূচকে থাকতে পারে না। সাধারণত - অনন্য কলাম মানগুলির জন্য - এটা সত্যিই সহজ। উদাহরণস্বরূপ, কলামের 'পজিশন' (বিভিন্ন উপাদানগুলির ক্রমানুসারে তথ্য) এর মানগুলির জন্য এটি 0 এর।

তারপর আপনি মান A কে একটি ভেরিয়েবলের মধ্যে কপি করতে পারেন, এটি মান B এর সাথে আপডেট করে তারপর আপনার ভেরিয়েবলের মান B সেট করুন। দুটি প্রশ্ন, যদিও আমি কোন ভাল সমাধান জানি।

0
যোগ