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.
Databaser & SQLur Databashanterare & SQL
18 svar · 499 visningar · startad av erciz
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?
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.
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?
Nej, ange alla kolumner,du kan inte använda * i group by.
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...
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å...
Lägg till ett anrop till mysql_error
$q = "select ...";
$c = mysql_query($q) or die (mysql_error() . " when doing" . $q);
posta resultatet.
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.
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
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?
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 |
+------+----------+--------+-------+
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å? :(
....
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 |
+------+----------+--------+-------+
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!
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
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 |
+------+----------+--------+-------+
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...