 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| 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: 807
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: 656
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 |
|
| |
|