ercizMedlem sedan maj 20011 826 inlägg Vad är det för fel på det här:
SELECT medlemmar.*,
(SELECT Count( * )
FROM rubriker
WHERE medlem='{$_GET['id']}')
AS antal
FROM medlemmar
WHERE id='{$_GET['id']}'
?
kan jag göra det på nåt annat sätt?
inte heller detta funkar för mig:
SELECT medlemmar.* Count(rubriker.medlem)
FROM medlemmar, rubriker
WHERE id='{$_GET['id']}'
AND medlem='{$_GET['id']}'
va e fel? hur ska jag göra?
LarsGMedlem sedan dec. 200012 464 inlägg Det är inget fel på den första ur SQL synpunkt.
Med den andra så måste du ha en group by där du anger alla kolumner i medlemmar.
ercizMedlem sedan maj 20011 826 inlägg Använder MySQL, och den första funkar inte för mig, men ska testa den andra med de ändringar du föreslog.
Menar du att jag ska lägga till GROUP BY medlemmar.* i den andra?
LarsGMedlem sedan dec. 200012 464 inlägg Nej, ange alla kolumner,du kan inte använda * i group by.
ercizMedlem sedan maj 20011 826 inlägg Jag provade med GROUP BY medlemmar.id (primärnyckeln), men det funkade inte, och inte hellar alla fält i medlemmar funkade....
finns det någon annan varian jag kan testa, borde väl finnas någon variant med JOIN... men jag är inte så bra på dom...
ercizMedlem sedan maj 20011 826 inlägg att jag får felmeddelandet:
mysql_fetch_array(): supplied argument is not a valid MySQL result resource
När jag försöker hämta data från MySQL på min PHP-sida.
Denna kod funkar, men den har ingen COUNT() som jag vill ha:
SELECT medlemmar.*
FROM medlemmar
WHERE medlem='{$_GET['id']}'
..jag vill alltså räkna ihop en gruppsumma i en annan tabell också...
LarsGMedlem sedan dec. 200012 464 inlägg Lägg till ett anrop till mysql_error
$q = "select ...";
$c = mysql_query($q) or die (mysql_error() . " when doing" . $q);
posta resultatet.
ercizMedlem sedan maj 20011 826 inlägg Tack, du lärde mig felsöka SQL-satser lite smidigare ;)
Men blev inte mkt klokar av felmeddelandet:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT COUNT(*) FROM rubriker WHERE medlem='1') AS antal FROM m when doing SELECT medlemmar.*, (SELECT COUNT(*) FROM poster WHERE medlem='1') AS antal FROM medlemmar WHERE id='1'
Det skumma är att satserna fungerar bra var för sig.
aasahMedlem sedan mars 20034 471 inlägg
erciz felmeddelande skrev:
.... 'SELECT COUNT(*) FROM rubriker WHERE medlem='1') ....
Jag tror att du har ett problem med appostrofer. Det där är korrekt om och endast om fältet medlem är en VARCHAR eller en TEXT. Om det däremot är ett heltal, vilket vore vettigare, så försöker du jämföra ett tal med ett strängvärde just nu!
medlem='1' , dvs strängen 1 Byt mot medlem=1 ==> heltalet 1
ercizMedlem sedan maj 20011 826 inlägg
aasah skrev:
erciz felmeddelande skrev:
.... 'SELECT COUNT(*) FROM rubriker WHERE medlem='1') ....
Jag tror att du har ett problem med appostrofer. Det där är korrekt om och endast om fältet medlem är en VARCHAR eller en TEXT. Om det däremot är ett heltal, vilket vore vettigare, så försöker du jämföra ett tal med ett strängvärde just nu!
medlem='1' , dvs strängen 1 Byt mot medlem=1 ==> heltalet 1
Provade, men det löste inte problemet.
Egentligen ska två variabler plockas in från PHP där, men nu testade jag att hårdkoda 1 och 1, men det funkade inte endå.
Men går det inte att fixa med någon JOIN tror ni?
ercizMedlem sedan maj 20011 826 inlägg Postar en liknande tabellstruktur med bara de berörda kolumnerna:
SQL:
"SELECT medlemmar.*,
(SELECT COUNT(*)
FROM poster
WHERE medlem=3) AS antal
FROM medlemmar
WHERE id=3";
poster
+------+----------+--------+
| id | medlem | text |
+------+----------+--------+
| 1 | 3 | Hej.. |
| 2 | 3 | Kanske |
| 3 | 5 | Nämen. |
+------+----------+--------+
medlemmar
+------+----------+--------+
| id | namn | År |
+------+----------+--------+
| 1 | Jonas | 2005 |
| 2 | Johan | 2001 |
| 3 | Bertil | 2004 |
+------+----------+--------+
Jag vill alltså SELECTa en medlem beroende på vilket input jag får t.ex. id=3. Och då vill jag skriva ut kolumnerna i medlemmar och antal poster medlemmen har gjort med COUNT(*) FROM poster WHERE medlem=3. Hoppas någon kan hitta felet nu....
Databas: MySQL version 4.0.23
Resultatet ska alltså bli:
+------+----------+--------+-------+
| id | namn | år | antal |
+------+----------+--------+-------+
| 3 | Bertil | 2004 | 2 |
+------+----------+--------+-------+
ercizMedlem sedan maj 20011 826 inlägg Hmm, läste lite i MySQLs manual om att "Subqueries" stöds från version 4.1.x.
Visst betyder det att min sql-variant inte funkar då? :(
aasahMedlem sedan mars 20034 471 inlägg Ja, MySQL's tidigare versioner saknar subquerys dvs delfrågor.
Baserat på din tabellstruktur nedan, pröva med detta:
SELECT M.*, count(P.id) FROM medlemmar M, poster P
WHERE P.medlem = M.id AND M.id = <värde>
Jag har fått för mig att denna fråga kan funka i MySQL. Pröva!
SQL:
poster
+------+----------+--------+
| id | medlem | text |
+------+----------+--------+
| 1 | 3 | Hej.. |
| 2 | 3 | Kanske |
| 3 | 5 | Nämen. |
+------+----------+--------+
medlemmar
+------+----------+--------+
| id | namn | År |
+------+----------+--------+
| 1 | Jonas | 2005 |
| 2 | Johan | 2001 |
| 3 | Bertil | 2004 |
+------+----------+--------+
Resultatet ska alltså bli:
+------+----------+--------+-------+
| id | namn | år | antal |
+------+----------+--------+-------+
| 3 | Bertil | 2004 | 2 |
+------+----------+--------+-------+
ercizMedlem sedan maj 20011 826 inlägg
aasah skrev:
Ja, MySQL's tidigare versioner saknar subquerys dvs delfrågor.
Baserat på din tabellstruktur nedan, pröva med detta:
SELECT M.*, count(P.id) FROM medlemmar M, poster P
WHERE P.medlem = M.id AND M.id = <värde>
Jag har fått för mig att denna fråga kan funka i MySQL. Pröva!
Jag provade. MySQL sa följande:
Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause when doing SELECT medlemmar.*, COUNT(poster.id) AS antal FROM medlemmar, poster WHERE poster.medlem = medlemmar.id AND medlemmar.id='1'
Jag lade till "GROUP BY medlemmar.id" på slutet och då funkade det!
BrimbaMedlem sedan dec. 19995 875 inlägg Prova med detta. Tror inte att du kan gruppera på *.
SELECT
M.id, M.namn, COUNT(P.id)
FROM
medlemmar M
INNER JOIN poster P ON M.id = P.medlem
GROUP BY
M.id, M.namn
HAVING
M.id = 1
ercizMedlem sedan maj 20011 826 inlägg
aasah skrev:
SELECT M.*, count(P.id) FROM medlemmar M, poster P
WHERE P.medlem = M.id AND M.id = <värde> GROUP BY M.id
aasahs SQL-sats funkar NÄSTAN, problemet är när en medlem inte har några inlägg i tabellen poster, då vill jag ha resultat som tabellerna nedan. Men med den SQL-sats jag använder nu så går det inte då WHERE-satsen blir fel.
WHERE P.medlem = M.id AND M.id = <värde>
blir
WHERE false AND true
vilket resulterar att ingen rad selectas.
SQL:
poster
+------+----------+--------+
| id | medlem | text |
+------+----------+--------+
| 1 | 3 | Hej.. |
| 2 | 3 | Kanske |
| 3 | 5 | Nämen. |
+------+----------+--------+
medlemmar
+------+----------+--------+
| id | namn | År |
+------+----------+--------+
| 1 | Jonas | 2005 |
| 2 | Johan | 2001 |
| 3 | Bertil | 2004 |
+------+----------+--------+
Resultatet ska alltså bli:
+------+----------+--------+-------+
| id | namn | år | antal |
+------+----------+--------+-------+
| 1 | Jonas | 2005 | 0 |
+------+----------+--------+-------+
ercizMedlem sedan maj 20011 826 inlägg Jag fick fram en lösning nu till slut. LEFT JOIN var nyckeln som löste problemet!
SELECT medlemmar.*, COUNT(poster.id) AS antal
FROM medlemmar
LEFT JOIN poster
ON medlemmar.id = poster.medlem
WHERE medlemmar.id='$id'
GROUP BY medlemmar.id
Tack alla som försökte hjälpa mig, och som hjälpte mig på traven...