Duplica questa tabella: User_PostsCodeigniter 3.0 interrogazione bug
ID | Upvotes | Downvotes | CAT |
___________________________________
42134 | 5 | 3 | Blogs|
------------------------------------
12342 | 7 | 1 | Blogs|
-------------------------------------
19344 | 6 | 2 | Blogs|
------------------------------------
ho bisogno di ottenere il rango di un elemento al suo interno di categoria. Pertanto, ID: 19344 avrà Rank position 2, con 4 upvotes, dietro 12342 con 6 upvotes. Il grado è determinato dal conteggio (upvotes-downvotes) nella sua categoria.
Così ho scritto questa query MySQL.
SELECT rank FROM (SELECT *, @rownum:[email protected] + 1 AS rank
FROM User_Posts where CAT= 'Blogs' order by
(Upvotes-Downvotes) DESC) d,
(SELECT @rownum:=0) t2 WHERE POST_ID = '19344'
ritorni a me (Rango = 2), quando eseguito direttamente in mysql. Questo è il risultato corretto
Tuttavia quando provo a costruirlo attraverso generatore di query di codice-accenditore mi vengono i
$table = 'User_Posts';
$CAT= 'Blogs';
$POST_ID = '19344';
$sql = "SELECT rank FROM (SELECT *, @rownum:[email protected] + 1 AS
rank FROM $table where CAT= ?
order by (Upvotes-Downvotes) DESC) d,
(SELECT @rownum:=0) t2 WHERE POST_ID= ?";
$query= $this->db->query($sql, array($CAT,$POST_ID))->row_array();
ritorna a me un risultato vuoto: array (rango =>);
quindi la mia domanda è ... ma perché?
Accetterò anche una risposta sarà un modo alternativo per eseguire questa query dal generatore di query code-igniters, ma idealmente mi piacerebbe sapere perché questa cosa è rotta.
Non è possibile semplificare l'SQL per 'SELECT (Upvotes - Downvotes) AS rank FROM User_Posts WHERE CAT = 'Blogs' AND POST_ID = 19344;'? Sembra che sarebbe troppo semplice da implementare anche nel generatore di query di CI. – quickshiftin
Il rango @quickshiftin non è il numero di (upvotes-downvotes) ma è la posizione dell'articolo rispetto a ciascun altro elemento nella stessa categoria. – Edward
Ok, come si tiene conto dei legami in (upvotes-downvotes) per una data categoria? – quickshiftin