Fonetisch zoeken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

George van Baasbank

George van Baasbank

17/10/2012 16:36:37
Quote Anchor link
Hallo allemaal,

Ik ben op zoek naar de mogelijkheid om fonetisch te zoeken in mijn database. Is dat met behulp van SQL mogelijk?

Bijv.: Bij het zoeken naar Baasbank moeten o.m. ook de volgende namen getoond worden:
Baasbank
Baesbank
Baesbancq
Baaszbank

enz.

Weet iemand of en hoe dat mogelijk is? (Ideale optie voor genealogen)


George
 
PHP hulp

PHP hulp

30/01/2025 22:25:30
 
Ozzie PHP

Ozzie PHP

17/10/2012 16:46:47
 
Kris Peeters

Kris Peeters

17/10/2012 16:51:02
Quote Anchor link
Had ik nog niet van gehoord.
Zou dat deftig werken? Iemand ervaring mee?
 
Eddy E

Eddy E

17/10/2012 17:14:58
Quote Anchor link
Heb er wel mee gewerkt. Werkt redelijk... als alles Engels is.
Voor Nederlands werkt het dus wel, maar pakt soms totaal verkeerd uit.
Trouwens: PHP heeft ook deze soundex-functie: http://php.net/manual/en/function.soundex.php
 
George van Baasbank

George van Baasbank

17/10/2012 17:26:44
Quote Anchor link
Hallo allemaal,

Ik heb ff de sites bezocht maar kom voorlopig tot de conclusie dat het, voor mij, in het NL maar matig werkt. Of eigenlijk helemaal niet goed. Als ik Baasbank in type krijg ik slects één Baesbanck te zien. Zelfs de goed geschreven namen komen niet in de lijst voor.

Ik heb de volgende code toegepast:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql = "SELECT * FROM ove_genealogie WHERE voornamen SOUNDS LIKE '$cVoornaam' AND tussenvoeg SOUNDS LIKE '$cTussenvoeg' AND achternaam SOUNDS LIKE '$cFamilienaam' ORDER BY achternaam ASC, voornamen ASC, g_sortdatum ASC ";
 
Ivo Breeden

Ivo Breeden

17/10/2012 20:52:45
Quote Anchor link
George, ik vind dit een heel interessant onderwerp. In 1987 heb ik voor het eerst kennis gemaakt met de soundex() functie op een cursus van Oracle versie 4. Sinds die tijd loop ik te verzinnen hoe je dat zou moeten gebruiken en nu, na 25 jaar, zie ik de practische toepassing dank zij jouw vraagstelling. Ik heb een stukje PHP geschreven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
  echo soundex('Baasbank') . "\n";
  echo soundex('Baesbank') . "\n";
  echo soundex('Baesbancq'). "\n";
  echo soundex('Baazbank') . "\n";
?>

En als ik dat uitvoer dan komt er het volgende uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
B215
B215
B215
B215

Dit lijkt me bemoedigend voor jouw onderzoek, George! Je wilde dat al je genoemde schrijfwijzen tot dezelfde uitspraak formule zouden worden herleid, en dat gebeurt dus ook met de PHP soundex() functie.
Ik hoop dat je daar wat mee kunt.
Werkt het niet bevredigend dan ligt er natuurlijk de mogelijkheid open om zelf een Nederlandse versie van soundex() te maken. Dat lijkt me niet zo heel moeilijk.
Gewijzigd op 17/10/2012 20:54:25 door Ivo Breeden
 
George van Baasbank

George van Baasbank

18/10/2012 08:49:46
Quote Anchor link
Het lijkt mij niet te lukken. Met bijgaande code geeft phpMyadmin een lege string terug

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
select * from ove_genealogie where  achternaam = soundex('baasbank')
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/10/2012 08:58:09
Quote Anchor link
Je moet beide waarde soundexen dus ook de kolom die je vergelijkt maw:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT achternaam FROM ove_genealogie WHERE SOUNDEX(achternaam) = SOUNDEX('baasbank')
 
George van Baasbank

George van Baasbank

18/10/2012 09:56:51
Quote Anchor link
Dan krijg ik:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql = "SELECT * FROM ove_genalogie WHERE SOUNDEX(voornamen) = SOUNDEX('$cVoornaam') OR SOUNDEX(tussenvoeg) = SOUNDEX('$cTussenvoeg') OR SOUNDEX(achternaam) = SOUNDEX('$cFamilienaam')";


en die werkt niet


Toevoeging op 18/10/2012 09:59:19:

Ik krijg nu bijna de gehele database op het scherm
 
Ozzie PHP

Ozzie PHP

18/10/2012 10:00:16
Quote Anchor link
spelfout: ove_genalogie => ove_genealogie
 
George van Baasbank

George van Baasbank

18/10/2012 10:04:12
Quote Anchor link
Die had ik al hersteld. Bedankt!!

Toevoeging op 18/10/2012 10:05:23:

Het "probleem"zit nu in de selectie. Bij gebruik van soundex op alleen het veld "achternaam" gaat goed, in combinatie met de voornaam danwel de tussenvoeg loopt het fout......
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/10/2012 10:09:43
Quote Anchor link
George van Baasbank op 18/10/2012 09:56:51:
Ik krijg nu bijna de gehele database op het scherm

Hetgeen toch wel logisch is, in het Nederlands zou je dit doen
Geef mij de personen waarvan de voornaam klinkt als 'Jan' of waarvan de achternaam klinkt als 'Jansen'
 
Ozzie PHP

Ozzie PHP

18/10/2012 10:11:59
Quote Anchor link
de OR's moeten dus AND's worden
 
George van Baasbank

George van Baasbank

18/10/2012 10:16:33
Quote Anchor link
Met deze regel krijg ik slechts één record te zien

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql = "SELECT * FROM ove_genealogie WHERE SOUNDEX(voornamen) = SOUNDEX('$cVoornaam') AND SOUNDEX(tussenvoeg) = SOUNDEX('$cTussenvoeg') AND SOUNDEX(achternaam) = SOUNDEX('$cFamilienaam')";
 
Ozzie PHP

Ozzie PHP

18/10/2012 10:27:00
Quote Anchor link
En dat is wel of niet goed?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/10/2012 10:32:54
Quote Anchor link
Staan er constant meerdere namen in de kolom voornamen?
En kijk eens gewoon met een SOUNDEX(kolom) in de SELECT wat voor resultaten je daaruit krijgt.
Cees of Kees, is namelijk niet hetzelfde en Jan of Jan_Pieter helemaal al niet
 
George van Baasbank

George van Baasbank

18/10/2012 10:47:09
Quote Anchor link
Ik heb een oplossing gevonden: Omdat het van te voren niet bekend is welke velden de gebruiker gaat invullen, heb ik dus verschillende combinaties in queries vastgelegd. Je krijgt dan max 9 verschillende mogelijkheden met de combinatie SOUNDEX en LIKE. Dit werkt nu goed en de resultaten zijn verbluffend.

Dank voor het meedenken en de suggesties.
 
Joey Drieling

Joey Drieling

18/10/2012 11:57:47
Quote Anchor link
kan je een voorbeeldje geeven van je resultaat code mvg.
 
George van Baasbank

George van Baasbank

18/10/2012 12:01:27
Quote Anchor link
Joey,

Wat voor soort voorbeeld wil je? Een hyperlink of een voorbeeld van de output?

Toevoeging op 18/10/2012 12:02:22:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Alleen de familienaam is ingevuld
            $cVoornaam    = "%" . $cVoornaam . "%";
            $cTussenvoeg  = "%" . $cTussenvoeg . "%";
            $sql = "SELECT * FROM ove_genealogie WHERE SOUNDEX(achternaam) = SOUNDEX('$cFamilienaam') AND tussenvoeg LIKE '$cTussenvoeg' AND voornamen LIKE '$cVoornaam' ORDER BY achternaam ASC, voornamen ASC, g_sortdatum ASC ";
        } elseif($cFamilienaam != "" AND $cVoornaam != "" AND $cTussenvoeg == "") {
            // Alleen de familienaam en voornamen zijn ingevuld
            $cTussenvoeg  = "%" . $cTussenvoeg . "%";
            $sql = "SELECT * FROM ove_genealogie WHERE SOUNDEX(achternaam) = SOUNDEX('$cFamilienaam') AND tussenvoeg LIKE '$cTussenvoeg' AND SOUNDEX(voornamen) = SOUNDEX('$cVoornaam') ORDER BY achternaam ASC, voornamen ASC, g_sortdatum ASC ";    
        } elseif($cVoornaam != "" AND $cTussenvoeg == "" AND $cFamilienaam == "") {
            // Alleen de voornaam is ingevuld
            $cTussenvoeg  = "%" . $cTussenvoeg . "%";
            $cFamilienaam = "%" . $cFamilienaam . "%";
            $sql = "SELECT * FROM ove_genealogie WHERE SOUNDEX(voornamen) = SOUNDEX('$cVoornaam') AND tussenvoeg LIKE '$cTussenvoeg' AND achternaam LIKE '$cFamilienaam' ORDER BY achternaam ASC, voornamen ASC, g_sortdatum ASC ";            
        } else {
            $cVoornaam    = "%" . $cVoornaam . "%";
            $cTussenvoeg  = "%" . $cTussenvoeg . "%";
            $cFamilienaam = "%" . $cFamilienaam . "%";
            $sql = "SELECT * FROM ove_genealogie WHERE voornamen = LIKE '$cVoornaam' AND achternaam LIKE '$cFamilienaam' AND tussenvoeg LIKE '$cTussenvoeg' ORDER BY achternaam ASC, voornamen ASC, g_sortdatum ASC";
        }


Toevoeging op 18/10/2012 12:05:51:

Ik heb de pagina even tijdelijk publiek toegankelijk gemaakt: http://ov.vanbaasbank.nl/bibliotheek.php

Zoek eens op de voornaam Gerrit en kijk in de lijst welke namen er langs komen. Ook het zoeken op Hans geeft leuke resultaten
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/10/2012 12:50:59
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$wheres
= array();
if ($cVoornaam != '') $wheres['voornamen'] = $cVoornaam;
if ($cAchternaam != '') $wheres['achternaam'] = $cAchternaam;
if ($cTussenvoeg != '') $wheres['tussenvoeg'] = $cTussenvoeg;
$sql = "SELECT CONCAT(voornamen, ' ',
                      LTRIM(CONCAT(tussenvoeg, ' ', achternaam))
                      ) AS fullname
        FROM ove_genealogie
        WHERE
        "
;
$and ='';
foreach ($wheres as $field => $value) {
    $sql .= $and . "SOUNDEX(" . $field . ") = SOUNDEX('" . $value . "')";
    $and = ' AND ';
?>

Niet alleen is de code korter, maar wordt de SQL netter, want als een kolom alles (LIKE '%%') mag bevatten kan je hem beter uit de filter weghalen
Gewijzigd op 18/10/2012 12:54:48 door Ger van Steenderen
 
George van Baasbank

George van Baasbank

18/10/2012 13:12:14
Quote Anchor link
Ger,

Ik weet het: Jij levert altijd hoge-school SQL af die goed werkt. Ook deze zal perfect werken. Ik ga eerst proberen uit te vinden wat je precies en waarom doet zodat ik het later nogmaals kan gebruiken maar vooral kan onderhouden.
De SELECT CONCAT zal wel wat nadere studie behoeven.

Alvast bedankt!!

George
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.