php not like op sql werkt niet ??

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Cor S

Cor S

16/01/2012 18:41:29
Quote Anchor link
Hallo mensen,

Ik wil een plaatsnaam die al bestaat bij een 2e insert uitsluiten.
De plaatsnaam is helaas geen primary index dus ik moet het anders oplossen.


Volgende code gemaakt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?
$select_catid
=
    
        "SELECT
            *
        FROM
            posts
        WHERE post_title LIKE '"
.$bundesselect."'
        AND post_title NOT LIKE '"
.$plaatsdubbel."'
        "
;

?>




Ik zie echter bij controle in de browser dat hij toch enkele plaatsen dubbel wil toevoegen en dus NOT LIKE $plaatsdubbel overslaat.

Iemand een idee?
 
PHP hulp

PHP hulp

22/12/2024 16:00:42
 
Erwin H

Erwin H

16/01/2012 18:56:59
Quote Anchor link
Gebruik je een wildcard in die variabelen? Zo niet dan is dat waarschijnlijk het punt en kan je net zo goed = gebruiken.
 
Cor S

Cor S

16/01/2012 19:03:59
Quote Anchor link
In een stap eerder zijn uit een lijst met cafes plaatsen geimporteerd.

Nu komen uit een lijst met hotels ook weer plaatsen die geinsert moeten worden.

Echter als de plaats al bestaat moet hij hem overslaan.

Replace / overwrite is geen optie omdat de bestaande plaatsid's moeten blijven bestaan ivm subverwijzingen.


Hier is wat meer code:

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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?
$links_qry
=
"SELECT
distinct plaatstitel,bundesland
FROM
hotels
"
;

$exec_links = mysql_query($links_qry) or die ('Ojee, foutieve query das lullig!: '.mysql_error());
while($veld = mysql_fetch_assoc($exec_links)){

    $plaats = $veld["plaatstitel"];
    $plaatsje = ereg_replace(' ', '-', $veld['plaatstitel']);
    $plaatsje = strtolower($plaatsje);
    $plaatsje = ereg_replace ("ä", "ae", $plaatsje);
    $plaatsje = ereg_replace ("ö", "oe", $plaatsje);
    $plaatsje = ereg_replace ("ü", "ue", $plaatsje);
    $plaatsje = ereg_replace ("ß", "ss", $plaatsje);
    $plaatsje = ereg_replace ("Ä", "Ae", $plaatsje);
    $plaatsje = ereg_replace ("Ö", "Oe", $plaatsje);
    $plaatsje = ereg_replace ("Ü", "Ue", $plaatsje);
        
    $bundesland = $veld["bundesland"];
    $bundeslink = ereg_replace(' ', '-', $veld['bundesland']);
    $bundeslink = ereg_replace ("ä", "ae", $bundeslink);
    $bundeslink = ereg_replace ("ö", "oe", $bundeslink);
    $bundeslink = ereg_replace ("ü", "ue", $bundeslink);
    $bundeslink = ereg_replace ("ß", "ss", $bundeslink);
    $bundeslink = ereg_replace ("Ä", "Ae", $bundeslink);
    $bundeslink = ereg_replace ("Ö", "Oe", $bundeslink);
    $bundeslink = ereg_replace ("Ü", "Ue", $bundeslink);
    $bundeslink = strtolower($bundeslink);
    $bundesselect = 'Vakantie in regio '.$bundesland;
    $plaatsdubbel = 'Vakantie in '.$plaats;

// stap 2. verbinden met tabel met posts voor ophalen postid  >> postid nodig voor de insert van links in nieuwe tabel links stap 3.
$select_catid =
    
        "SELECT
            *
        FROM
            posts
        WHERE post_title LIKE '"
.$bundesselect."'
        AND post_title NOT LIKE '"
.$plaatsdubbel."'
        "
;

$exec_catid = mysql_query($select_catid) or die ('Ojee, foutieve query!: '.mysql_error());
while ($veldje = mysql_fetch_assoc($exec_catid)) {
        $catid = $veldje["ID"];
        

?>
 
Erwin H

Erwin H

16/01/2012 19:08:23
Quote Anchor link
Geef eens een voorbeeld van welke dubbele namen hij dan overslaat en wat de waarde is van de $plaatsdubbel in die specifieke query.
 
Cor S

Cor S

16/01/2012 19:16:35
Quote Anchor link
Bijvoorbeeld de plaatnaam Bremen bestaat al in de tabel met posts de post_title hiervan is: Vakantie in Bremen


In de 2e query probeer ik dus door de variabele $plaatsdubbel te gebruiken te voorkomen dat posts met dezelfde titel nogmaals geplaatst worden.
 
Erwin H

Erwin H

16/01/2012 19:19:12
Quote Anchor link
Dat is het probleem. Als je geen wildcard gebruikt dan werkt LIKE nagenoeg hetzelfde als =.
Als je in plaats van "Bremen" nu "%Bremen%" gebruikt dan zal die "Vakantie in Bremen" wel gevonden worden.

Check http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html voor de wildcards.
 
Cor S

Cor S

16/01/2012 19:24:02
Quote Anchor link
Mag ik die % ook gebruiken rondom een variabele, of werkt die alleen op tekst ?

op mysql.com heb ik de hele middag al geneust en geexperimenteerd. Kijk zo nog even naar jouw artikel.

Toevoeging op 16/01/2012 19:29:28:

Dus kan dit ??

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
AND post_title NOT LIKE '".%$plaatsdubbel%."'
?>
 
Erwin H

Erwin H

16/01/2012 19:44:51
Quote Anchor link
Nee, je moet die % gewoon als een string zien. Je kan dus wel zo doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
"AND post_title NOT LIKE '%".$plaatsdubbel."%'";
?>

of:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$plaatsdubbel
= "%".$plaatsdubbel."%";
?>
 
Cor S

Cor S

16/01/2012 19:45:36
Quote Anchor link
Thnx ik test hem
 
Noppes Homeland

Noppes Homeland

16/01/2012 20:31:58
Quote Anchor link
De ereg zal onderhand toch wel over z'n nekkie gaan, herschrijven naar preg_ of kies een ander string fucntie die dit ook kan doen.
 
Cor S

Cor S

16/01/2012 20:43:18
Quote Anchor link
Dat gaat nog wel, maar voor beginners is het makkelijk te werken met wat je kent.

Heb vandaag al uren doorgebracht op msql forum en allerlei zaken in dit probleem geprobeerd.

Ook dit werkt nu nog niet.

Stop maar even voor vandaag en ga morgen verder.

Gelukkig ben ik wel eigenwijs en ga door tot iets werkt, desnoods via omwegen en in stappen.
 
Bas  van de Steeg

Bas van de Steeg

16/01/2012 20:51:12
Quote Anchor link
@Cor
Zoals je zelf al zegt kun je beter gewoon even een rustig nachtje slapen dan dat je er uren tijd instopt.
Ik weet namelijk zeker dat als je morgen weer kijkt je het waarschijnlijk zo hebt opgelost.
 
- SanThe -

- SanThe -

17/01/2012 03:54:18
Quote Anchor link
Let wel op dat ereg_replace() antiek is. Gebruik preg_replace().
 
Pieter Jansen

Pieter Jansen

17/01/2012 04:06:50
Quote Anchor link
Dat wil ik wel beamen. Daarnaast kun je alle ereg_replace() ook vervangen door bijvoorbeeld str_replace(); te gebruiken. Scheelt een stuk code en je zou het sneller kunnen laten werken. EREG_ stamt uit de POSIX tijd en de nieuwe PREG_ uit de Perl tijd. Perl is wat sneller en bovendien ook effectiever. Zo zal str_replace(); bijvoorbeeld sneller zijn dan preg_replace(); Maar goed, hieronder een voorbeeldje:

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

$niet_toegestaan
= array("ä", "ö", "ü", "ß", "Ä", "Ö", "Ü");
$wel_toegestaan = array("ae", "oe", "ue", "ss", "Ae", "Oe", "Ue");

$bundeslink = str_replace($niet_toegestaan, $wel_toegestaan, $bundeslink);

// of bijvoorbeeld in een functie
function strip_rare_letters($string){
    $niet_toegestaan = array("ä", "ö", "ü", "ß", "Ä", "Ö", "Ü");
    $wel_toegestaan = array("ae", "oe", "ue", "ss", "Ae", "Oe", "Ue");
    return str_replace($niet_toegestaan, $wel_toegestaan, $string);
}

// nu kun je de zelfde functionaliteit overal in je script gebruiken
// zonder steeds dezelfde regels te hoeven kopieren.

?>
 
Cor S

Cor S

17/01/2012 16:25:06
Quote Anchor link
Hey mensen,

Bedankt voor de hulp en tips.

Ga wat later dan gepland weer verder, maar ik heb geen haast dat scheelt.

Merijn, bedankt voor bovenstaande voorbeelden, dat scheelt inderdaad veel code en is een mooie les voor me.

Heb die replaces inderdaad nog veel meer gebruikt ook in andere projectjes en scripts, ga nu maar eens aanpassen en oefenen.

Voor wat betreft het niet filteren op die ene plaatsnaam ga ik ook maar eens de DB nakijken of hij niet per ongeluk een spatie in het veld heeft staan die je niet ziet.
Desnoods exporteer ik record nog even naar kladblok of ultra edit om zeker te weten dat er niets in veld staat wat er niet hoort en doe een nieuwe import.

Als het lukt horen jullie het, en anders post ik (helaas) nog maar eens.
 



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.