Category Url'imi Nasıl Alabilirm?
Merhabalar. Ben mevcut konumun category_id sini çektirebilecek bir fonksiyona sahibim. İstiyorum ki çektirdiğim konunun kategorisinin id si yanında bir de category_url ini çektireyim.
Kısaca çektirdiğim categorinin category_url ini de aldırmak istiyorum da diyebiliriz.
Nasıl Yapabilirim?
Kodum:
function Get_url($url){
$veri=[];
$datas = $db->prepare('SELECT * FROM posts WHERE url = ?');
$datas->execute([$url]);
$data = $datas->fetch(PDO::FETCH_ASSOC);
foreach($data as $key=>$value){
$datas = $db->prepare('SELECT * FROM categories WHERE id = ?, category_url = ?');
$datas->execute([$value['id']], [$value['category_url']]);
$veri[] = $datas->fetch(PDO::FETCH_ASSOC);
}
}
SELECT * FROM categories WHERE id = ?
sorgunuz yeterli olmalı.
Eğer categories
tablonuzda category_id
diye bir sütununuz varsa bu zaten dönecektir.
Veritabanına döngü içinde çok sayıda istek atmamanızı öneririm. Nasıl bir istek atacaksanız onu PHP ile kurgulayıp veritabanından tek seferde cevap almaya çalışmanız veritabanını daha az yoracaktır.
Aşağıdaki örnekte 4 kategoriniz varmış gibi düşünelim.
Veritabanına foreach
içinde istek atmayı kaldırdığımız için veritabanına 4 kez istek atmak yerine sadece 1 kez istek atabilecek hale getirmiş oluyoruz. posts
tablosuna attığımız istekle birlikte 5 yerine 2 istekte veritabanından sonuçlarımızı alabiliyoruz.
function getUrl($url){
global $db;
$query = $db->prepare('SELECT * FROM posts WHERE url = ?');
$query->execute([$url]);
$data = $query->fetch(PDO::FETCH_ASSOC);
$idValues = [];
foreach($data as $dataItem) $idValues[] = "id = $dataItem["id"]";
// $idValues dizisi içinde şuna benzer bir veri oluştu: ["id=1", "id=2", "id=4", "id=12"]
$idValues = implode(" OR ", $idValues);
// $idValues şu string'e döndü: "id=1 OR id=2 OR id=4 OR id=12"
$query = $db->prepare("SELECT * FROM categories WHERE $idValues");
$query->execute();
$categories = $query->fetchAll();
return $categories;
}
$cats = getUrl("url verisi");
echo "ilk category_id verisi: ".$cats[0]->category_id;
Aslında daha da ileri gidip tek sorguda iki tabloyu birleştirerek sonuç almak en güzel.