Woord laten tellen in database
Ik ben nog een beginner op MySQL gebied maar vroeg mij af hoe ik een bepaald woord uit een bepaalde kolom kan laten tellen.
Dus als ik heb:
Id - Achternaam
1 - Jansen
2 - Zomer
3 - Jansen
Dat ik dan automatisch in php kan laten weergegeven, de achternaam Jansen is '2' keer voorgekomen.
Alvast bedankt!
Lasse
Dit is de query die je wilt gebruiken...
Jep, in een tabel met veel records zal dat met deze query zeker een snelheidswinst opleveren.
Het wordt een tabel met ongeveer 400 rijen en 10 kolommen. Is het dan zinvol om de index toe te passen? En hoe pas ik deze index dan toe? Een link naar een tutorial/script is ok goed.
Ok bedankt!
Lasse schreef op 20.12.2007 20:16:
400? Dat is dan 400 x niks. Pas bij een paar miljoen records begint het echt wat te worden, bij 400 miljoen kun je spreken van 'groot'. Wanneer jij voor de id's een INT gebruikt, kun je zo'n 4 miljard records aanmaken, bij een BIGINT nog véél meer.Het wordt een tabel met ongeveer 400 rijen en 10 kolommen. Is het dan zinvol om de index toe te passen? En hoe pas ik deze index dan toe? Een link naar een tutorial/script is ok goed.
Mensen denken klein, databases werken in het groot.
@Frank TS zegt ook niet dat het groot wordt :)
Klaasjan Boven schreef op 24.12.2007 17:34:
Dat weet ik, maar ik wilde hem even duidelijk maken dat 400 records onvoorstelbaar weinig is voor een database. @Frank TS zegt ook niet dat het groot wordt :)
Tenminste, wanneer je geen terrabytes aan data in 1 enkel record op gaat slaan. In PostgreSQL geldt een maximum van 32TB per tabel en 1.6TB per record. MySQL kan minder data kwijt, maar nog altijd achtelijk veel.
pgFrank schreef op 24.12.2007 17:39:
Dat weet ik, maar ik wilde hem even duidelijk maken dat 400 records onvoorstelbaar weinig is voor een database.
Bedankt ;) k heb dan ook geen gebruikt van de indexen maar van onderstaant script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
mysql_connect("localhost", "username", "password");
mysql_select_db("database") or die( "Unable to select database");
$query = "SELECT achternaam, COUNT(achternaam) AS aantal FROM tabel WHERE achternaam = 'Jansen' GROUP BY achternaam";
$resultaat = mysql_query($query);
while ($rij = mysql_fetch_array($resultaat)) {
$achternaam = $rij["achternaam"];
$totaal = $rij["aantal.achternaam"];
$totaal = $rij['aantal'];
echo"De achternaam $achternaam is $totaal keer voorgekomen.<br>\n";
}
?>
mysql_connect("localhost", "username", "password");
mysql_select_db("database") or die( "Unable to select database");
$query = "SELECT achternaam, COUNT(achternaam) AS aantal FROM tabel WHERE achternaam = 'Jansen' GROUP BY achternaam";
$resultaat = mysql_query($query);
while ($rij = mysql_fetch_array($resultaat)) {
$achternaam = $rij["achternaam"];
$totaal = $rij["aantal.achternaam"];
$totaal = $rij['aantal'];
echo"De achternaam $achternaam is $totaal keer voorgekomen.<br>\n";
}
?>
Dit script werkt maar nu ontstaat er een probleem. Als er in het veld Achternaam bijvoorbeeld 'Jansen Minkes' is ingevuld telt het script deze waarde niet. Alleen als er alleen maar 'Jansen' is ingevuld en niet meer. Hoe kan ik er voor zorgen dat deze toch ook geteld wordt?
Gewijzigd op 01/01/1970 01:00:00 door Lasse
Met COUNT(achternaam) haal je gewoon het aantal velden op.
Ik zou zo snel niet weten of er een MySQL equivalent is voor de PHP substr_count functie. Het lijkt er dus op dat je gewoon de inhoud van het veld 'achternaam' voor de hele tabel moet fetchen en dan met PHP substrings gaan zitten tellen.
Edit:
Net even getest, en dit werkt in ieder geval:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
require 'classes/class.core.php';
require 'classes/class.database.php';
$db = new database ();
$sql = "
SELECT naam
FROM ckv_instellingen
";
$n = 0;
$search = 'de';
if ($res = $db->query ($sql)) {
while ($row = $db->fetch ()) {
$n += substr_count ($row['naam'], $search);
}
echo '<p>' . $search . ' is ' . $n . ' keer gevonden.</p>';
}
?>
require 'classes/class.core.php';
require 'classes/class.database.php';
$db = new database ();
$sql = "
SELECT naam
FROM ckv_instellingen
";
$n = 0;
$search = 'de';
if ($res = $db->query ($sql)) {
while ($row = $db->fetch ()) {
$n += substr_count ($row['naam'], $search);
}
echo '<p>' . $search . ' is ' . $n . ' keer gevonden.</p>';
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Lasse schreef op 24.12.2007 18:32:
k heb dan ook geen gebruikt van de indexen maar van onderstaant script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
mysql_connect("localhost", "username", "password");
mysql_select_db("database") or die( "Unable to select database");
$query = "SELECT achternaam, COUNT(achternaam) AS aantal FROM tabel WHERE achternaam = 'Jansen' GROUP BY achternaam";
$resultaat = mysql_query($query);
while ($rij = mysql_fetch_array($resultaat)) {
$achternaam = $rij["achternaam"];
$totaal = $rij["aantal.achternaam"];
$totaal = $rij['aantal'];
echo"De achternaam $achternaam is $totaal keer voorgekomen.<br>\n";
}
?>
mysql_connect("localhost", "username", "password");
mysql_select_db("database") or die( "Unable to select database");
$query = "SELECT achternaam, COUNT(achternaam) AS aantal FROM tabel WHERE achternaam = 'Jansen' GROUP BY achternaam";
$resultaat = mysql_query($query);
while ($rij = mysql_fetch_array($resultaat)) {
$achternaam = $rij["achternaam"];
$totaal = $rij["aantal.achternaam"];
$totaal = $rij['aantal'];
echo"De achternaam $achternaam is $totaal keer voorgekomen.<br>\n";
}
?>
Maar als ik met bovenstaand script een achternaam zoek die (nog) niet voorkomt wordt er niets weergegeven. Hier zou ik dan graag bij $totaal 0 aangeven, iemand idee hoe ik dat realiseer?
Alvast bedankt!
Suggesties voor betere constructies?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
mysql_connect("localhost", "username", "password") or die(mysql_error());
mysql_select_db("database") or die( "Unable to select database");
$query = "
SELECT achternaam,
COUNT(achternaam) AS aantal
FROM tabel
WHERE achternaam = 'Jansen'
GROUP BY achternaam
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
else
{
while ($rij = mysql_fetch_array($res))
{
echo '<p>De achternaam '.$row['achternaam'].' komt '.$row['aantal'].' keer voor.</p>';
}
}
?>
mysql_connect("localhost", "username", "password") or die(mysql_error());
mysql_select_db("database") or die( "Unable to select database");
$query = "
SELECT achternaam,
COUNT(achternaam) AS aantal
FROM tabel
WHERE achternaam = 'Jansen'
GROUP BY achternaam
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
else
{
while ($rij = mysql_fetch_array($res))
{
echo '<p>De achternaam '.$row['achternaam'].' komt '.$row['aantal'].' keer voor.</p>';
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit