আমি আপনার প্রশ্নের তিনটি স্ট্রিং নিয়েছি এবং এটিকে একটি টেবিলের সাথে আরও তিনটি স্ট্রিংয়ের pankt
পরিবর্তে যুক্ত করেছি punkt
।
উইন্ডোজের জন্য মাইএসকিউএল 5.5.12 ব্যবহার করে নিম্নলিখিতটি কার্যকর করা হয়েছিল
mysql> CREATE TABLE artikel
-> (
-> id INT NOT NULL AUTO_INCREMENT,
-> meldungstext MEDIUMTEXT,
-> PRIMARY KEY (id),
-> FULLTEXT (meldungstext)
-> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO artikel (meldungstext) VALUES
-> ('Punkten'),('Zwei-Punkte-Vorsprung'),('Treffpunkt'),
-> ('Pankten'),('Zwei-Pankte-Vorsprung'),('Treffpankt');
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql>
আমি 3 টি ভিন্ন ভিন্ন পদ্ধতির সাহায্যে টেবিলের বিপরীতে এই প্রশ্নগুলি চালিয়েছি
পার্থক্য নোট করুন
mysql> SELECT id,meldungstext,
-> COUNT(IF(MATCH (`meldungstext`) AGAINST ('*punkt*' IN BOOLEAN MODE),1,0)) PunktMatch,
-> IF(LOCATE('punkt',meldungstext)>0,1,0) PunktLocate,
-> meldungstext LIKE '%punkt%' PunktLike
-> FROM `artikel` GROUP BY id,meldungstext;
+----+-----------------------+------------+-------------+-----------+
| id | meldungstext | PunktMatch | PunktLocate | PunktLike |
+----+-----------------------+------------+-------------+-----------+
| 1 | Punkten | 1 | 1 | 1 |
| 2 | Zwei-Punkte-Vorsprung | 1 | 1 | 1 |
| 3 | Treffpunkt | 1 | 1 | 1 |
| 4 | Pankten | 1 | 0 | 0 |
| 5 | Zwei-Pankte-Vorsprung | 1 | 0 | 0 |
| 6 | Treffpankt | 1 | 0 | 0 |
+----+-----------------------+------------+-------------+-----------+
6 rows in set (0.01 sec)
mysql>
সমস্ত পাঙ্ক ম্যাচ মানগুলি 3 1 এবং 3 0 এর মৌমাছি হওয়া উচিত।
এখন আমাকে সাধারণ হিসাবে জিজ্ঞাসা করুন
mysql> SELECT `meldungstext` FROM `artikel`
-> WHERE MATCH (`meldungstext`) AGAINST ('*punkt*' IN BOOLEAN MODE);
+-----------------------+
| meldungstext |
+-----------------------+
| Zwei-Punkte-Vorsprung |
| Punkten |
+-----------------------+
2 rows in set (0.01 sec)
mysql> SELECT `meldungstext` FROM `artikel`
-> WHERE LOCATE('punkt',meldungstext)>0;
+-----------------------+
| meldungstext |
+-----------------------+
| Punkten |
| Zwei-Punkte-Vorsprung |
| Treffpunkt |
+-----------------------+
3 rows in set (0.00 sec)
mysql> SELECT `meldungstext` FROM `artikel`
-> WHERE `meldungstext` LIKE '%punk%';
+-----------------------+
| meldungstext |
+-----------------------+
| Punkten |
| Zwei-Punkte-Vorsprung |
| Treffpunkt |
+-----------------------+
3 rows in set (0.00 sec)
mysql>
ঠিক আছে ম্যাচ ব্যবহার করে .. পাঙ্ক্ট সহ আবার কাজ করে না। পঙ্ক্টের কি ???
mysql> SELECT `meldungstext` FROM `artikel` WHERE `meldungstext` LIKE '%pankt%';
+-----------------------+
| meldungstext |
+-----------------------+
| Pankten |
| Zwei-Pankte-Vorsprung |
| Treffpankt |
+-----------------------+
3 rows in set (0.00 sec)
mysql>
GROUP BY
পঙ্ক্টের বিরুদ্ধে আমার বড় প্রশ্নটি চালাও
mysql> SELECT id,meldungstext,
-> COUNT(IF(MATCH (`meldungstext`) AGAINST ('*pankt*' IN BOOLEAN MODE),1,0)) PanktMatch,
-> IF(LOCATE('pankt',meldungstext)>0,1,0) PanktLocate,
-> meldungstext LIKE '%pankt%' PanktLike
-> FROM `artikel` GROUP BY id,meldungstext;
+----+-----------------------+------------+-------------+-----------+
| id | meldungstext | PanktMatch | PanktLocate | PanktLike |
+----+-----------------------+------------+-------------+-----------+
| 1 | Punkten | 1 | 0 | 0 |
| 2 | Zwei-Punkte-Vorsprung | 1 | 0 | 0 |
| 3 | Treffpunkt | 1 | 0 | 0 |
| 4 | Pankten | 1 | 1 | 1 |
| 5 | Zwei-Pankte-Vorsprung | 1 | 1 | 1 |
| 6 | Treffpankt | 1 | 1 | 1 |
+----+-----------------------+------------+-------------+-----------+
6 rows in set (0.01 sec)
mysql>
এটিও ভুল কারণ পঞ্চম্যাচের জন্য আমার 3 0 এবং 3 1 টি দেখতে হবে।
আমি অন্য কিছু চেষ্টা করেছিলাম
mysql> SELECT id,meldungstext, MATCH (`meldungstext`) AGAINST ('+*pankt*' IN BOOLEAN MODE) PanktMatch, IF(LOCATE('pankt',meldungstext)>0,1,0) PanktLocate, meldungstext LIKE '%pankt%' PanktLike FROM `artikel` GROUP BY id,meldungstext;
+----+-----------------------+------------+-------------+-----------+
| id | meldungstext | PanktMatch | PanktLocate | PanktLike |
+----+-----------------------+------------+-------------+-----------+
| 1 | Punkten | 0 | 0 | 0 |
| 2 | Zwei-Punkte-Vorsprung | 0 | 0 | 0 |
| 3 | Treffpunkt | 0 | 0 | 0 |
| 4 | Pankten | 1 | 1 | 1 |
| 5 | Zwei-Pankte-Vorsprung | 1 | 1 | 1 |
| 6 | Treffpankt | 0 | 1 | 1 |
+----+-----------------------+------------+-------------+-----------+
6 rows in set (0.00 sec)
mysql>
আমি পঙ্কিতে একটি প্লাস চিহ্ন যোগ করেছি এবং আমি বিভিন্ন ফলাফল পেয়েছি। কি 2 এবং 3 নয় ???
মাইএসকিউএল ডকুমেন্টেশন অনুসারে , ওয়াইল্ডকার্ড চরিত্র সম্পর্কে এটি কী বলেছে তা লক্ষ্য করুন:
*
তারকাচিহ্নটি কাটা (বা ওয়াইল্ডকার্ড) অপারেটর হিসাবে কাজ করে। অন্যান্য অপারেটরগুলির বিপরীতে, শব্দটি প্রভাবিত হওয়ার জন্য এটি যুক্ত করা উচিত। শব্দগুলি * অপারেটরের পূর্ববর্তী শব্দটি দিয়ে শুরু করলে শব্দগুলি মিলবে।
যদি কোনও শব্দ ছাঁটাই অপারেটরের সাথে নির্দিষ্ট করা থাকে তবে এটি একটি বুলিয়ান কোয়েরি থেকে ছিটানো হয় না, এমনকি এটি খুব ছোট হলেও (ft_min_word_len সেটিংস থেকে নির্ধারিত) বা স্টপওয়ার্ড। শব্দটি খুব সংক্ষিপ্ত বা স্টপওয়ার্ড হিসাবে দেখা যায় না, তবে এটি একটি উপসর্গ হিসাবে দেখা যায় যা উপসর্গ দিয়ে শুরু হওয়া শব্দের আকারে নথিতে উপস্থিত থাকতে হবে। ধরুন যে ft_min_word_len = 4। তারপরে '+ শব্দ + দ্য *' এর অনুসন্ধানে '+ শব্দ + the' অনুসন্ধানের চেয়ে কম সারি ফিরে আসবে:
পূর্ববর্তী ক্যোয়ারীটি যেমন রয়েছে তেমন এবং দস্তাবেজটিতে উপস্থিত হওয়া শব্দ এবং * (একটি দিয়ে শুরু হওয়া শব্দ) উভয়ই দরকার।
পরের ক্যোয়ারীটি + শব্দে রূপান্তরিত হয়েছে (কেবলমাত্র শব্দের উপস্থিত থাকার প্রয়োজন রয়েছে)। উভয়ই খুব সংক্ষিপ্ত এবং স্টপওয়ার্ড, এবং উভয় শর্তই এটিকে উপেক্ষা করার জন্য যথেষ্ট।
এর উপর ভিত্তি করে, ওয়াইল্ডকার্ড চরিত্রটি টোকেনের পিছনের জন্য প্রযোজ্য, সামনের জন্য নয়। এর আলোকে, আউটপুটটি অবশ্যই সঠিক হতে হবে কারণ 3 পাঙ্ক্টের শুরু টোকেনগুলির মধ্যে 2। পঙ্ক্টের সাথে একই গল্প। এটি কমপক্ষে 3 টির মধ্যে 2 এবং কেন কম সারি ব্যাখ্যা করে।