Severity: 8192
Message: Creation of dynamic property CI_URI::$config is deprecated
Filename: core/URI.php
Line Number: 101
Severity: 8192
Message: Creation of dynamic property CI_Router::$uri is deprecated
Filename: core/Router.php
Line Number: 127
Severity: 8192
Message: Creation of dynamic property index::$benchmark is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$hooks is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$config is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$log is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$utf8 is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$uri is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$exceptions is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$router is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$output is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$security is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$input is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$lang is deprecated
Filename: core/Controller.php
Line Number: 75
Severity: 8192
Message: Creation of dynamic property index::$load is deprecated
Filename: core/Controller.php
Line Number: 78
Severity: 8192
Message: Creation of dynamic property index::$db is deprecated
Filename: core/Loader.php
Line Number: 390
Severity: 8192
Message: Creation of dynamic property CI_DB_mysqli_driver::$autoinit is deprecated
Filename: database/DB_driver.php
Line Number: 371
Severity: 8192
Message: Return type of CI_Session_files_driver::open($save_path, $name) should either be compatible with SessionHandlerInterface::open(string $path, string $name): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Filename: drivers/Session_files_driver.php
Line Number: 113
Severity: 8192
Message: Return type of CI_Session_files_driver::close() should either be compatible with SessionHandlerInterface::close(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Filename: drivers/Session_files_driver.php
Line Number: 280
Severity: 8192
Message: Return type of CI_Session_files_driver::read($session_id) should either be compatible with SessionHandlerInterface::read(string $id): string|false, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Filename: drivers/Session_files_driver.php
Line Number: 145
Severity: 8192
Message: Return type of CI_Session_files_driver::write($session_id, $session_data) should either be compatible with SessionHandlerInterface::write(string $id, string $data): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Filename: drivers/Session_files_driver.php
Line Number: 223
Severity: 8192
Message: Return type of CI_Session_files_driver::destroy($session_id) should either be compatible with SessionHandlerInterface::destroy(string $id): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Filename: drivers/Session_files_driver.php
Line Number: 303
Severity: 8192
Message: Return type of CI_Session_files_driver::gc($maxlifetime) should either be compatible with SessionHandlerInterface::gc(int $max_lifetime): int|false, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
Filename: drivers/Session_files_driver.php
Line Number: 344
Severity: 8192
Message: Creation of dynamic property index::$session is deprecated
Filename: core/Loader.php
Line Number: 1290
Severity: 8192
Message: Creation of dynamic property index::$pagination is deprecated
Filename: core/Loader.php
Line Number: 1290
Severity: 8192
Message: Creation of dynamic property index::$email is deprecated
Filename: core/Loader.php
Line Number: 1290
Severity: 8192
Message: Creation of dynamic property index::$ders_model is deprecated
Filename: core/Loader.php
Line Number: 353
Severity: 8192
Message: Creation of dynamic property index::$bilgi_model is deprecated
Filename: core/Loader.php
Line Number: 353
Severity: 8192
Message: Creation of dynamic property CI_Loader::$data is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$benchmark is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$hooks is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$config is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$log is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$utf8 is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$uri is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$exceptions is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$router is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$output is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$security is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$input is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$lang is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$load is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$db is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$session is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$pagination is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$email is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$ders_model is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$bilgi_model is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property index::$makale_model is deprecated
Filename: core/Loader.php
Line Number: 353
Severity: 8192
Message: setcookie(): Passing null to parameter #7 ($httponly) of type bool is deprecated
Filename: core/Input.php
Line Number: 410
Severity: 8192
Message: Creation of dynamic property index::$yorum_model is deprecated
Filename: core/Loader.php
Line Number: 353
Severity: 8192
Message: Creation of dynamic property CI_Loader::$makale_model is deprecated
Filename: core/Loader.php
Line Number: 925
Severity: 8192
Message: Creation of dynamic property CI_Loader::$yorum_model is deprecated
Filename: core/Loader.php
Line Number: 925
Ben bu blogu tasarlarken 1 hafta boyunca etiketler ve makale ilişkilerini nasıl yapacağımı düşündüm. Veritabanı tasarımı çok zorlamasa da Codeigniter ile kodlaması epey zamanımı aldı açıkçası. Bu makalede etiket bulutu için ideal veritabanı tasarımını anlatacağım.
Etiket bulutu için elimizde minimum 3 adet tablo bulunması gerekiyor.
yazilar tablosunu inceleyelim. Oluşturulacak sütunlar id, icerik, baslik, tarih ve projenize ait diğer sütunlar.
Bu tabloda işimize yarayacak olan sütun id sütunudur. Her yazının farklı bir id'si olmalıdır. Bu yüzden id sütunu primary key olmalıdır. Diğer sütunlar ise yazıyı tanımmlayan sütunlardır yani yazı içeriğini belirten icerik sütunu, yazı başlığını belirten baslik sütunu ve yazı tarihini belirten tarih sütunudur.

CREATE TABLE `yazilar` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`icerik` text NOT NULL,
`baslik` varchar(200) NOT NULL,
`tarih` date NOT NULL,
PRIMARY KEY (`id`)
);
etiketler tablosunu inceleyelim. Oluşturulacak sütunlar id, etiket ve hit sütunları.
Bu tabloda da her etikete özgü bir id değeri olmalıdır. Bu yüzden id sütunu primary key olacaktır. etiket sütunu ekleyeceğimiz etiketi içermelidir. hit sütunu ise o etiketten kaç adet bulunduğunu gösterir. Her satırda bir adet etiket tanımlanmalıdır.

CREATE TABLE `etiketler` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`etiket` varchar(50) NOT NULL,
`hit` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
);
yazi_etiket tablosunu inceleyelim. Oluşturulacak sütunlar yazi_id ve etiket_id sütunları.
İşin en önemli noktası bu tablo yani yazıları ve etiketleri birbirleriyle ilişkilendireceğimiz tablodur. yazi_id sütununda yazilar tablosundaki bir yazıya ait id, etiket_id sütununda ise etiketler tablosundaki bir etiket id'si olmalıdır ki yazı ve etiketi ilişkilendirebilelim.

CREATE TABLE `yazi_etiket` (
`yazi_id` int(10) unsigned NOT NULL,
`etiket_id` int(10) unsigned NOT NULL
);
Nasıl Kullanılabilir?
yazi_etiket tablosunun amacı yazilar ve etiketler tablosunun id'lerini tutmak ve gerektiğinde bu id'ler sayesinde hangi yazının hangi etiketleri olduğunu bulabilmek.
Örnek yazilar tablosu

Örnek etiketler tablosu

Örnek yazi_etiket tablosu

Tablolara göre 2 tane yazımız var. 1. yazı Android Başlığı ve 2. yazı PHP Başlığı. Android Başlığı adlı yazının sahip olduğu etiketler yazi_etiket tablosunda yazi_id'si 1 olan bütün satırlardır (etiket_id'si 4,3 ve 1 olan etiketler). Aynı şekilde PHP Başlığı adlı yazının sahip olduğu etiketler de yazi_etiket tablosunda yazi_id'si 2 olan bütün satırlardır (etiket_id'si 3,2 ve 1 olan etiketler). etiketler tablosuna dikkat ederseniz 2 yazının da ortak olan 2 tane etiketi vardır. Bunlar php ve android etiketleridir. Bu yüzden hit sütununda o etiketin karşısında 2 yazmaktadır.
Şimdi kısa bir örnek SQL sorgusu ile veritabanından nasıl veri çekebileceğinizi anlatıp yazımı bitireceğim.
SELECT e.etiket FROM yazi_etiket AS ye, etiketler AS e WHERE ye.yazi_etiket = "1" AND ye.etiket_id = e.id;
yazilar tablosundan id'si 1 olan yazının etiketlerini bu SQL sorgusu ile çekebiliriz. 1 yazan yeri istediğiniz yaznın id'si ile değiştirebilirsiniz.
mysql
php
etiket bulutu tasarımı
mysql etiket bulutu
mysql etiket bulutu veritabanı tasarımı
mysql etiket bulutu veritabanı oluşturmak
mysql etiket bulutu oluşturmak
YORUMLAR
SELECT e.etiket FROM yazi_etiket AS ye, etiketler AS e WHERE ye.yazi_etiket = \"etiketlerini istediğiniz makale id si\" AND ye.etiket_id = e.id;yazdığım sql sorgusuyla istediğiniz makalenin etiketlerini çekip yazdırabilirsiniz. en kısa zamanda bununla ilgili bir örneği makaleye ekleyeceğim.