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.
Misschien heb ik het niet goed gelezen, maar de TS wil volgens mij weten hoevaak een bepaalde string in een bepaald veld in de tabel voorkomt.
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:[/edit]
<?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>';
}
Zoals ik het las ging het om de volledige waarden in de kolom Achternaam en het aantal keer dat deze verschillende waarden in totaal voorkomen. In dat geval gebruik je dus GROUP BY om te groeperen op die waarden...
Bedankt voor het script ik zit er nu mee te knutselen.
Lasse schreef op 24.12.2007 18:32
k heb dan ook geen gebruikt van de indexen maar van onderstaant script:
<?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";
}
?>
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?
De COUNT hoort gewoon 0 terug te geven inderdaad. Wat is dit verder voor vreemde contructie:
<?php
$totaal = $rij["aantal.achternaam"];
?>
Wat probeer je hiermee te bereiken?
Geen idee, heb het script niet zelf geschreven. Alleen waarden aangepast naar eigen wensen om zo MySQL beetje bij beetje proberen te ontdekken.
Suggesties voor betere constructies?
Eerder een suggestie voor netter scripten en het juiste toepassen van foutafhandeling:
<?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>';
}
}
?>