MySQL: count waar x = x

Gestart doorDylan25 reacties204 weergaven

26 berichten · pagina 1 van 2

Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Hoi,

Ik ben bezig met internetFAQ en wil zo min mogelijk gebruik maken van queries, ik wil zoveel mogelijk data ophalen uit 1 query. Nu heb ik deze query:

Codeblok (voorbeeld.php):

1
2
3
4
5
6

SELECT
COUNT(username) as username,
COUNT(email) as email,
COUNT(ip_registed) as ip
FROM users
WHERE

Nu wil ik dus tellen hoeveel gebruikersnamen er zijn waar de gebruikersnaam x is, en waar email x is en waar ip_register x is, alleen hoe kan ik dit doen in 1 query?

Als ik bijv, WHERE username = piet; kan ik dus alleen username tellen.
0
Berichten
294
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Kun je niks met IDs doen? Of begrijp ik dit verkeerd?
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Nee, ik wil kijken hoeveel gebruikersnamen er al bestaand waar gebruikersnaam x is, zelfde bij ip en email.

Codeblok (voorbeeld.php):

1
2
3

SELECT COUNT(username) as username FROM users WHERE username = Piet;
SELECT COUNT(email) as email FROM users WHERE email = piet@google.nl;
SELECT COUNT(ip_registed) as ip FROM users WHERE ip = 127.0.0.1;

Maar dan in 1 query.
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Dat kan eigenlijk niet. Je moet dan gebruik maken van subqueries. iets als:

SELECT COUNT( (SELECT username FROM users WHERE username = piet) );

Maar dan kan je dus net zo goed een nieuwe query draaien.
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Toch wel:

Codeblok (voorbeeld.php):

1
2
3
4
5

SELECT
SUM(username = ".$mysql->real_escape_string($_POST[username]).") as username,
SUM(email = ".$mysql->real_escape_string($_POST[email]).") as email,
SUM(ip_registed = ".$mysql->real_escape_string($_SERVER[REMOTE_ADDR]).") as ip
FROM users");
0
Berichten
5.274
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien

Eindhoven, Nederland

Dylanh schreef:
Toch wel:
Codeblok (voorbeeld.php):

1
2
3
4
5

SELECT
SUM(username = ".$mysql->real_escape_string($_POST[username]).") as username,
SUM(email = ".$mysql->real_escape_string($_POST[email]).") as email,
SUM(ip_registed = ".$mysql->real_escape_string($_SERVER[REMOTE_ADDR]).") as ip
FROM users");

Whut? Kan je die query uitleggen? Het lijkt me niet dat die werkt.. Of ik mis nou gewoon een punt in MySQL.. Je geeft een variable mee in de SELECT statement x.x?
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Dylanh schreef:
Toch wel:
Codeblok (voorbeeld.php):

1
2
3
4
5

SELECT
SUM(username = ".$mysql->real_escape_string($_POST[username]).") as username,
SUM(email = ".$mysql->real_escape_string($_POST[email]).") as email,
SUM(ip_registed = ".$mysql->real_escape_string($_SERVER[REMOTE_ADDR]).") as ip
FROM users");

Zoek eens op wat SUM() precies doet, dit is totaal niet wat je bedoelt
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
@Lennard

Dit is precies wat ik bedoel.
Wouterr schreef:
Eerdere citaten tonen
Dylanh schreef:
Toch wel:
Codeblok (voorbeeld.php):
1
2
3
4
5

SELECT
SUM(username = ".$mysql->real_escape_string($_POST[username]).") as username,
SUM(email = ".$mysql->real_escape_string($_POST[email]).") as email,
SUM(ip_registed = ".$mysql->real_escape_string($_SERVER[REMOTE_ADDR]).") as ip
FROM users");

Whut? Kan je die query uitleggen? Het lijkt me niet dat die werkt.. Of ik mis nou gewoon een punt in MySQL.. Je geeft een variable mee in de SELECT statement x.x?

Wat in de SUM() staat is zeg maar een if statement
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
En waarom denk je dat er een if statement in die SUM() kan? confused
en ALS het al zou kunnen dan voer je die if enkel uit op de huidige rij, dus waar je where aan voldoet (dus in dit geval voor alle rijen apart), en krijg je dus per rij een 1 (want decimale waarde van true?) of een 0, afhankelijk van of de username e.d. gelijk is aan die POST.

Kortom, er klopt echt niks van hoor. Doe maar eens een testrun ofzo.
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Afbeelding

Output:

Codeblok (voorbeeld.php):

1
2
3
4
5
6

Array
(
[username] => 1
[email] => 2
[ip] => 4
)

Input:

Codeblok (voorbeeld.php):

1
2
3
4
5

$_POST[username] = Lennard;
$_POST[password] = qaz1;
$_POST[password2] = qaz1;
$_POST[email] = 2@live.nl;
$_POST[legal] = TRUE;

toevoeging op 22 april 2014, 101936:
http://stackoverflow.com/questions/23199586/mysql-counts-with-more-wheres-in-1-query
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Huh wtf, okédan emo
echt zon dirty MySQL-only-dingetje dan. Ik zou het liever op een nette manier oplossen, maar dat moet je zelf weten natuurlijk.
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Lennard schreef:
Huh wtf, okédan emo
echt zon dirty MySQL-only-dingetje dan. Ik zou het liever op een nette manier oplossen, maar dat moet je zelf weten natuurlijk.
Hoe zo jij het doen dan? 3 queries draaien?
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Dat hangt af van wat je met die query/data wil doen.
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Kijken of het gebruikersnaam/email al bestaat en hoevaak het IP adres is gebruikt.
0
Berichten
5.274
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien

Eindhoven, Nederland

Lennard schreef:
Huh wtf, okédan emo
echt zon dirty MySQL-only-dingetje dan. Ik zou het liever op een nette manier oplossen, maar dat moet je zelf weten natuurlijk.
Dat verklaart mijn vraag. emo Mn oracle docent wist ook niet dat het kon, haha emo
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren