Ben bu tür işlemleri gönderimli fonksiyonlar ile çözüyorum. Belki şuna benzer bir işlem işinizi çözebilir. Tamamen deneysel yazdım, hatalar çıkabilir.
function subCategoriesList($topCategory, &$allSubCategories)
{
$subCategories = $this->databaseConn->query("SELECT * FROM category WHERE topCategory = $topCategory", PDO::FETCH_ASSOC);
if ($subCategories->rowCount()) {
foreach ($subCategories as $category) {
$allSubCategories[] = $category['id'];
subCategoriesList($category['id'], $allSubCategories);
}
}
return $allSubCategories;
}
$list = subCategoriesList(1, $allSubCategories);
print_r($allSubCategories);
$stmt = $db->query("SELECT veri_kodu, COUNT(*) as adet FROM veriler GROUP BY veri_kodu");
$sonuclar = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
extract($sonuclar, EXTR_PREFIX_ALL, 'count');
print_r(get_defined_vars());
echo $count_1;
echo $count_2;
echo $count_3;
Cevap ile değil de yapmaya çalıştığın şeyle ilgili araştırmalarım olmuştu ve benimsediğiniz yaklaşımdan ziyade beğenilerin farklı bir tabloda saklanmasını daha uygun olduğu kanısına varmıştık.
Birden çok yorumu beğendiği bir sistemde, her kullanıcının beğendiği soruların ID'sini nasıl saklayacağınız, uygulamanın ihtiyaçlarına ve performans gereksinimlerine bağlıdır. Ancak, genellikle iki farklı yaklaşım kullanılır:
İlişkisel tablo kullanımı:
Bu yaklaşımda, her kullanıcının beğendiği her soru için bir satır saklandığı ayrı bir ilişkisel tablo oluşturulur. Bu tabloda, her satırda kullanıcının ID'si ve beğendiği sorunun ID'si yer alır. Bu yaklaşım, verilerin bütünlüğünü korur ve daha iyi performans sunar.
Örneğin, aşağıdaki gibi bir tablo yapısı kullanılabilir:
user_id question_id
1 | 10
1 | 15
2 | 10
2 | 20
Bu şekilde, kullanıcının beğendiği sorulara erişmek için basit bir SQL sorgusu kullanılabilir:
SELECT question_id FROM user_questions WHERE user_id = 1;
Bu sorgu, kullanıcının ID'si 1 olan soruların tüm ID'lerini döndürür.
Virgülle ayrılmış sütun kullanımı:
Bu yaklaşımda, sorular tablosuna bir sütun eklenir ve bu sütunda kullanıcının beğendiği tüm soruların ID'leri virgülle ayrılmış olarak saklanır. Bu yaklaşım daha basit bir tablo yapısı sunar, ancak verilerin bütünlüğü korunmaz ve performans sorunları ortaya çıkabilir.
Örneğin, aşağıdaki gibi bir tablo yapısı kullanılabilir:
id title liked_by
1 | Example question 1 | 1,2
2 | Example question 2 | 1
3 | Example question 3 | 2
Bu şekilde, kullanıcının beğendiği sorulara erişmek için bir SQL sorgusu kullanılabilir:
SELECT id, title FROM questions WHERE liked_by LIKE '%1%';
Bu sorgu, sorular tablosundaki tüm soruları tarayarak, "liked_by" sütununda kullanıcının ID'sinin geçtiği tüm kayıtları döndürür.
Sonuç olarak, veritabanı yapısının seçimi, uygulamanın özelliklerine ve performans gereksinimlerine bağlıdır. Ancak, genellikle ilişkisel tabloların kullanılması daha iyi bir seçim olacaktır, çünkü bu yöntem veri bütünlüğünü korur ve performans açısından daha iyidir.
Tabii örnekteki gibi LIKE değil de FIND_IN_SET() ile sorgulanıyor.
Muhtemelen disk alanın doluyor, wma_logs tablosunu bir temizle
Ajax dan kastınız tam olarak nedir acaba, tarayıcı açık olduğu sürece ajax çalıştırıp session un kapanmasını önlemek mi yoksa tarayıcı yeniden açıldığında eski session değerini geri getirmek mi
Cookie ye kayıt edeceksin ama şifrelenmiş bir şekilde, tarayıcı yeniden açılınca özel şifreleme algoritması ile şifrelediğin session değerini çözüp yeniden etkin yapın.
@tayfunerbilen, hocam teşekkür ediyorum. Şimdiye kadar bu şekil çoklu tablonun birbiri ile etkileşimini gerektirecek ihtiyaçlarım olmadığı için öğrendiğimde tam manasıyla doğrusunu öğrenmek istedim. Bahsettiğiniz konular sonucunda 3. bir tablodan başka seçenek kalmıyor.