Compare data

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter de Beer

Peter de Beer

26/09/2013 11:56:01
Quote Anchor link
Hallo,

Ik ben bezig om data te vergelijken allen het moet iets strakker

ik heb het volgde:

1 tabel met titles

1 tabel met links en naam aan de link

Nu wil ik kijken welke van de titels over een komen met links en die in een tabel match_links zetten

Nu heb ik het volgde

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php

$sql
= 'SELECT * FROM links WHERE title like "%'.$row["titleName"].'%" OR `title` LIKE "'.$row["titleName"].'%" OR `title` LIKE "%'.$row["titleName"].'" AND `match` = "0"  ' ;
?>

Allen zo vang ik dus best vaak shit mee die niet het zelfde is

Mijn vraga is dus is er een beter manier om data te vergelijken dan met % %
Gewijzigd op 26/09/2013 11:56:32 door Peter de Beer
 
PHP hulp

PHP hulp

17/11/2024 12:21:51
 
Kris Peeters

Kris Peeters

26/09/2013 12:46:36
Quote Anchor link
Om te beginnen is er de volgorde van operatoren

a OR b OR c AND d
betekent
a OR b OR (c AND d)

Ongetwijfeld bedoel je
(a OR b OR c) AND d

Jij krijgt dus veel records waarbij match gelijk welke waarde heeft.

Die haakjes moet je sowieso gebruiken in je SQL string.
 
Peter de Beer

Peter de Beer

26/09/2013 13:26:41
Quote Anchor link
even een voorbeeld

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
SELECT
    *
FROM
    links_forum
WHERE
    (title like '%Ali%'
        OR `title` LIKE 'Ali%'
        OR `title` LIKE '%Ali')
        AND `match` = '0';

?>


Ik krijg zo veel shit mee die niet oke is

Dus ik wil veel strakker zoeken
 
Kris Peeters

Kris Peeters

26/09/2013 14:01:28
Quote Anchor link
Geef eens een aantal voorbeelden van titels; van records die je niet wil.

De query die je hier geeft, daar krijg je toch enkel titels waar 'ali' in in voorkomt, nee?
 
Peter de Beer

Peter de Beer

26/09/2013 14:06:59
Quote Anchor link
In het voorbeeld ben ik op zoek naar een film die heeft Ali

Nu voer ik het volgde uit en ik krijg:

Hot.in.Cleveland.S04E13.Its.Alive.WEBRip.x264.AAC-NoGRP
Top Gear Australia COMPLETE S 1-2-3-4 avi
Californication 01-02-03-04 DVDRips 05 06 HDTV
Dada Life - Dada Land-SAT-06-01-2013-TALiON
Danny Howard - The Essential Selection-SAT-06-21-2013-TALiON


je ziet over al komt het woord ali in voor maar dat zoek ik dus niet

ik zoek dus eigenlijk het woord maar het moet altijd los voor komen in de zin dus niet een deel zijn van een ander woord
Gewijzigd op 26/09/2013 14:08:04 door Peter de Beer
 
Kris Peeters

Kris Peeters

26/09/2013 15:24:54
Quote Anchor link
Okay, probeer dit eens:

Dus, bij jouw fetch haal je $row['titel'] eerst door deze functie die ik net gemaakt heb.
Als die FALSE teruggeeft, is de match gevonden binnen een woord; niet als apart woord.
dus iets als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
while($row = mysql_fetch_assoc($res)) {
  $wordpos = wordpos($row['titel'], 'Ali');
  if($wordpos === false) {
    continue;  // dan wordt de iteratie overgeslagen
  }
  echo ' ... ';
}

?>



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
53
54
55
56
57
58
59
60
61
62
63
<?php
$needle
= 'Ali';

$results = array(
'Hot.in.Cleveland.S04E13.Its.Alive.WEBRip.x264.AAC-NoGRP',  // lijn 0
'Top Gear Australia COMPLETE S 1-2-3-4 avi',                // lijn 1
'C. ali fornication 01-02-03-04 DVDRips 05 06 HDTV',        // ...
'Dada Life - Dada Land-SAT-06-01-2013-TALiON',
'Danny Howard - The Essential Selection-SAT-06-21-2013-TALiON',
);


foreach ($results as $key=>$item) {
  $wordpos = wordpos($item, $needle);
  if ($wordpos !== false) {
    echo 'lijn ' . $key . ' (nul based!) bevat het woord "' . $needle . '"<br>';
  }
}


// Vergelijk dit met strpos.  Maar dan met wat extra's
// mixed wordpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

function wordpos($haystack, $needle, $offset = 0) {
  $ignoreCharacters = array(' ', ',', '.', ';', "'", '"', '-');  // vul gerust aan.  Dit zijn karakters die mogen voorkomen net voor en net na het woord; en toch blijft het een woord.
  $pointer = 0;  
  
  // merk op: een woord kan meermaals voorkomen.  We moeten dit blijven testen voor alle resultaten van str(i)pos
  do {
    // als beide true geven, is het ding een woord.
    $beforeOkay = false;
    $afterOkay = false;
    // start en stop index van waar (in de haystack) de needle voorkomt.
    $start = stripos($haystack, $needle, $pointer);   // stripos  is case-insensitive.  ALs je dat niet wil, maak er strpos van
    $end = $start + strlen($needle) - 1;
    $pointer = $start + 1;  // bij de volgende iteratie gaan we beginnen zoeken 1 karakter verder dan de start van deze $start
    
    if($start === false) {
      break;  // de needle komt helemaal niet voor in de haystack
    }
    
    if($start === 0) {
      // De haystack begint met needle.  Dat mag.
      $beforeOkay = true;
    }

    //echo $end  .' '. strlen($haystack) .'<br>';
    if ($end +1 === strlen($haystack)) {
      // De haystack eindigt met needle.  Dat mag.
      $afterOkay = true;
    }

    // zien naar de karakters die komen net voor en net na de needle
    if ($beforeOkay == false && in_array($haystack{$start - 1}, $ignoreCharacters)) {
      $beforeOkay = true;
    }

    if ($afterOkay == false && in_array($haystack{$end + 1}, $ignoreCharacters)) {
      $afterOkay = true;
    }
  }
while( ! ($beforeOkay && $afterOkay) );
  
  if ($beforeOkay && $afterOkay) {
    return $start;
  }

  
  return false;
}

?>
 
Erwin H

Erwin H

26/09/2013 17:08:19
Quote Anchor link
Peter de Beer op 26/09/2013 13:26:41:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
SELECT
    *
FROM
    links_forum
WHERE
    (title like '%Ali%'
        OR `title` LIKE 'Ali%'
        OR `title` LIKE '%Ali')
        AND `match` = '0';

?>

Dit is overigens ook een beetje onzinnig. De tweede en derde LIKE voorwaarde leveren geen enkele match op die de eerste niet al oplevert. De tweede en derde kan je dus gewoon weglaten.

Vervolgens kan je oplossing overigens heel erg simpel zijn, namelijk door gebruik te maken van reguliere expressies in je query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT title
FROM links_forum
WHERE title REGEXP '[[:<:]]Ali[[:>:]]';

[[:<:]] en [[:>:]] zijn 'word boundaries'. Als het woord 'ali' gevonden wordt in de title dan wordt het record geselecteerd, anders niet.

Meer info over REGEXP in mysql: http://dev.mysql.com/doc/refman/5.1/en/regexp.html
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

26/09/2013 18:04:48
Quote Anchor link
@Kris: In php gegevens filteren lijkt mij niet zo verstandig.

Hoewel Erwin ook een mooie oplossing heeft, zou ik in dit geval voor een full text search gaan.
Gewijzigd op 26/09/2013 18:05:45 door Ger van Steenderen
 
Peter de Beer

Peter de Beer

27/09/2013 09:31:27
Quote Anchor link
heej,

ten eerste bedankt voor jullie reactie ik denk zelf ook dat filterteren met sql slimmer is dan in php (vandaar ook dat ik het in "Databases & SQL" heb gezet )

Nu regexp idd een goed idee was er gister zelf ook gevonden had allen niet de juiste code. Allen ik blijf resultaten vinden die niet oke zijn

Nu heb ik een volgde idee ik heb een lijst met woorden die aan geven dat het gaat om een goede title

"cam" "ts" "divx" "mkv" "xvid" "dvd" "dvdr" "dvdrip" "brrip" "br2dvd" "r5" "r6" "x264" "ts2dvd" "dvd5" "dvd9" "720p" "1080p"

En dan wil ik zoeken op de title moet er in zitten en minstens 1 van deze key words

Toevoeging op 27/09/2013 13:37:27:

Ik heb nu het volgde

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
SELECT
    title
FROM
    links_forum
WHERE
    title REGEXP '[[:<:]]The grey[[:>:]].*[[:<:]](cam|ts|divx|mkv|xvid|dvd|dvdr|dvdrip|brrip|br2dvd|r5|r6|x264|ts2dvd|dvd5|dvd9|720p|1080p)[[:>:]]';
?>


Probleem is dat deze gewoon super traag is al snel 2,5 min weet iemand hoe ik dit sneller kan maken
 



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.