मेरे पास निम्न तालिकाओं:संख्या:
post (id, title, content) etc
author (id, username) etc
author_vote (post_id, author_id, value)
मूल्य एक tiny_int है कि या तो किया जा सकता है 1 या -1।
मैं प्रत्येक पद के लिए सकारात्मक और नकारात्मक वोटों की संख्या की गणना करना चाहते:
$posts = sql_select($link, "SELECT post.*, author.username
FROM post, author
AND author.id = post.author_id");
निम्नलिखित कोड क्यों काम नहीं करता है?
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"));
}
इसके अलावा डेटाबेस एकाधिक क्वेरी करने के लिए बिना यह करने के लिए किसी भी तरह से है:
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"));
});
मैं भी निम्नलिखित की कोशिश की है, यह उस प्रत्येक पद के लिए एक ही हो सब वोट का कारण बनता है प्रत्येक पोस्ट के लिए समय? कुछ ऐसा कैसे होता है जो लगातार बदल रहा है [इस तरह] (मेम) कैश्ड हो?
'एसक्यूएल क्या करता है _select' वापसी? क्या इस समारोह के लिए दस्तावेज है? – webbiedave
आपके वर्तमान एसक्यूएल में आप एसयूएम का उपयोग कर रहे हैं जब वास्तव में आप COUNT का उपयोग कर सकते हैं जो तेजी से परिणाम देगा। –
sql_select एक ऐसा फ़ंक्शन है जिसे मैंने स्वयं बनाया है, यदि कोई एसक्यूएल क्वेरी गलत है तो यह एक अपवाद फेंकता है (यानी यह चयन नहीं कर सकता) – jonnnnnnnnnie