php not like op sql werkt niet ??
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)
1
2
3
4
5
6
7
8
9
10
11
12
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."'
";
?>
$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?
Gebruik je een wildcard in die variabelen? Zo niet dan is dat waarschijnlijk het punt en kan je net zo goed = gebruiken.
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)
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
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"];
?>
$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"];
?>
Geef eens een voorbeeld van welke dubbele namen hij dan overslaat en wat de waarde is van de $plaatsdubbel in die specifieke query.
In de 2e query probeer ik dus door de variabele $plaatsdubbel te gebruiken te voorkomen dat posts met dezelfde titel nogmaals geplaatst worden.
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.
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 ??
of:
Thnx ik test hem
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.
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.
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.
Let wel op dat ereg_replace() antiek is. Gebruik preg_replace().
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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.
?>
$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.
?>
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.