Ben Aşağıdaki tablolarda:Sayma sayısı:
post (id, title, content) etc
author (id, username) etc
author_vote (post_id, author_id, value)
değer olabilir, ya bir tiny_int 1 ya da -1.
Her yazı için pozitif ve negatif oy sayısını saymak istiyor:
$posts = sql_select($link, "SELECT post.*, author.username
FROM post, author
AND author.id = post.author_id");
Neden Aşağıdaki kod çalışmıyor?
foreach ($posts as &$post)
{
$id = $post['id'];
$post['positive'] = (int)sql_select($link, "SELECT SUM(value) FROM author_vote WHERE post_id = $id
AND value = 1");
$post['negative'] = (int)abs(sql_select($link, "SELECT SUM(value) FROM author_vote WHERE post_id = $id
AND value = -1"));
}
Ayrıca veritabanı birden sorgulamak zorunda kalmadan bunu yapmak için herhangi bir yol yoktur: Ben de şunları denedim
array_walk($posts, function(&$post, $link){
$post['positive'] = sql_select($link, "SELECT SUM(value) FROM author_vote WHERE post_id = $post['id']
AND value = 1");
$post['negative'] = abs(sql_select($link, "SELECT SUM(value) FROM author_vote WHERE post_id = $post['id']
AND value = -1"));
});
, bu her bir yayın için aynı olması tüm oy neden olur her gönderi için kaç kez? Sürekli olarak değişmekte olan bir şey nasıl olurdu (mem) önbelleğe alınır?
Ne sql yapar _select' geri dönüyor? Bu işlev için belge var mı? – webbiedave
Mevcut SQL'inizde SUM kullanıyorsunuz, aslında daha hızlı sonuç veren COUNT kullanabilirsiniz. –
sql_select kendim yaptığım bir işlevdir, sql sorgusu yanlışsa bir istisna atar (yani seçimi gerçekleştiremez) – jonnnnnnnnnie