Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

mysql COUNT from multiple tables without GROUP BY
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> MySQL
Subiectul anterior :: Subiectul următor  
Autor Mesaj
alin2005



Data înscrierii: 20/Dec/2007
Mesaje: 6

Trimis: Joi Dec 20, 2007 2:27 pm    Titlul subiectului: mysql COUNT from multiple tables without GROUP BY  

Salut,

Cum pot selecta un "count" dintr-un query unde sunt Join-uri multiple fara sa folosesc "GROUP BY" pt ca am nevoie de "ORDER BY"

Query-ul:
Cod: $res = mysql_query(
"SELECT at.postid, t.subject, COUNT(p.id) AS p_id ".
"FROM attachments AS at ".
"LEFT JOIN attachmentdownloads AS atdl ON at.filename=atdl.filename ".
"LEFT JOIN topics AS t ON at.topicid=t.id ".
"LEFT JOIN posts AS p ON p.topicid=at.topicid ".
"WHERE at.owner=".sqlesc($CURUSER['id'])." ORDER BY at.filename ASC"
) or sqlerr(__FILE__, __LINE__);

am nevoie de COUNT id din tabelul posts, dar fara GROUP BY, deoarece cum am zis am nevoie de ORDER BY ca sa fie in regula :(

Daca folosesc ORDER BY imi da eroarea asta

Citat: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause in...

PS: am incercat cu COUNT(DISTINCT p.id) AS p_id si tot nimic

Multumesc anticipat :)
Sus  
Quber



Data înscrierii: 27/Iun/2006
Mesaje: 791
Locație: localhost

Trimis: Joi Dec 20, 2007 4:58 pm    Titlul subiectului:  

Nustiu daca e correct dar incearca asha:

Cod:
$res = mysql_query(
"SELECT at.postid, t.subject, COUNT(p.id) AS p_id ".
"FROM attachments AS at, posts AS p ".
"LEFT JOIN attachmentdownloads AS atdl ON at.filename=atdl.filename ".
"LEFT JOIN topics AS t ON at.topicid=t.id ".
"WHERE p.topicid=at.topicid  AND at.owner=".sqlesc($CURUSER['id'])." ORDER BY at.filename ASC"
) or sqlerr(__FILE__, __LINE__);
Sus  
alin2005



Data înscrierii: 20/Dec/2007
Mesaje: 6

Trimis: Joi Dec 20, 2007 5:22 pm    Titlul subiectului:  

din pacate nu merge...

tot aceiasi eroare...

:(
Sus  
carco



Data înscrierii: 27/Mai/2004
Mesaje: 2796
Locație: Bucuresti

Trimis: Joi Dec 20, 2007 7:37 pm    Titlul subiectului:  

foloseste GROUP BY (si poti pune si ORDER)
Sus  
alin2005



Data înscrierii: 20/Dec/2007
Mesaje: 6

Trimis: Joi Dec 20, 2007 8:30 pm    Titlul subiectului:  

am incercat si asa, dar nu trebuie sa am group by, ca altfel modifica ce vreau eu, le groupeaza si nu imi arata realele "rows" :(
Sus  
dechim



Data înscrierii: 10/Mai/2005
Mesaje: 551
Locație: Drobeta Turnu Severin

Trimis: Joi Dec 20, 2007 8:50 pm    Titlul subiectului:  

Daca n-ai clauza GROUP BY n-are count(*) ce sa contorizeze.
As zice sa incerci sa adaugi la sfarsit un UNION dintr-un select asemanator dar care sa faca GROUP BY si count(), mai ai astfel un set de inregistrari cu cheia si count() (din aceaste inregistrare campurile in plus nu intereseaza)
Asa ma gandesc:
Cod:

SELECT at.postid AS post_id, t.subject AS subject_name, 0 AS p_id, alte_campuri
   FROM attachments AS at
   LEFT JOIN attachmentdownloads AS atdl ON at.filename = atdl.filename
   LEFT JOIN topics AS t ON at.topicid = t.id
   LEFT JOIN posts AS p ON p.topicid = at.topicid
   WHERE at.owner=$id 
   UNION
(
SELECT
   at.postid AS post_id, t.subject AS subject_name, count(*) AS p_id , alte _campuri
   FROM attachments AS at
   LEFT JOIN attachmentdownloads AS atdl ON at.filename = atdl.filename
   LEFT JOIN topics AS t ON at.topicid = t.id
   LEFT JOIN posts AS p ON p.topicid = at.topicid
   WHERE at.owner=$id 
   GROUP BY at.postid
)   
   ORDER BY at.filename, p_id ASC

Sus  
alin2005



Data înscrierii: 20/Dec/2007
Mesaje: 6

Trimis: Joi Dec 20, 2007 10:04 pm    Titlul subiectului:  

Citat: Table 'at' from one of the SELECTs cannot be used in global ORDER clause in
Sus  
carco



Data înscrierii: 27/Mai/2004
Mesaje: 2796
Locație: Bucuresti

Trimis: Vin Dec 21, 2007 6:35 am    Titlul subiectului:  

sorry, nu vazusem ce vrei sa faci, m-a indus in eroare afirmatia ca nu merge group cu order

incearca in loc de COUNT(p.id) AS p_id sa folosesti un subquery
Cod:
SELECT
  at.postid,
   t.subject,
  (select count(*) FROM posts WHERE posts.topicid = at.topicid) AS p_id
FROM  attachments AS at
...

(si nu mai pui LEFT JOIN posts AS p ON p.topicid=at.topicid)
Sus  
alin2005



Data înscrierii: 20/Dec/2007
Mesaje: 6

Trimis: Vin Dec 21, 2007 9:08 pm    Titlul subiectului: REZOLVAT ;)  

Mersi mult carco, asa a mers, nu stiam de asta :)

:P
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> MySQL
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community