[PHP / MySQL] Query uit textfile

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik haal uit een textfile de volgende artikel catagorien binnen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1000-Geluidsapparatuur
2000-Video
2800-Portofoons
4000-Verlichting
4500-Dimmers
5000-Bekabeling
6000-Theater Doeken
6400-Stand Bouw Materialen
6700-Site Materialen
7500-Arbeid & Transport
8000-Trussing
9000-Rigging
9800-Gereedschap


Nu explode ik dit om de artikel code op te halen en wil op basis van het eerste nummer (bv 1000) alle artikelen uit een database halen die met 1, dus 1xxx beginnen tot het volgende nummer, 2000 dus.
PHP:
1
2
3
4
5
6
foreach ($lines as $line_num => $line) {
$split = explode("-", $line); 
 
// Query doen op basis van het nummer dat overblijft $split[0];

}


Dit zou geen probleem zijn tenzij ik geen tussen nummers had gehad bv:
4500-Dimmers

nou zou het handig zijn om de artikel catagorien tijdens het inlezen in een nieuwe array te proppen
code:
1
2
3
4
1=1000-Geluidsapparatuur
2=2000-Video
3=2800-Portofoons
etc

wat kan ik dan namelijk doen; een query uitvoeren waar ik kan doen:
PHP:
1
 WHERE itemnr BETWEEN '1' AND '2'

Maar goed voor de laatste catagorie gaat dit niet op want daar voor in geen volgende catagorie...

Voor de genen die het nog snappen:
Hoe is dit slim op te lossen?

[ Voor 7% gewijzigd door ViNyL op 21-07-2006 12:35 ]


Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
Tsja, lijkt me redelijk simpel te doen:

PHP:
1
2
3
4
5
6
7
$data = readfile(bestand);
foreach($data as $line)
{
    $temparray = explode("-",$line);
    $nummer = substr($temparray[0], 0, strlen($temparray[0])-2);
    $catarray[$nummer] = $line[1];
}

en nu heb je een lijstje met nummers en categorieeen:
code:
1
2
3
4
5
6
10=>Geluidsapparatuur
20=>Video
.
.
98=>Gereedschap
110=>Overig


en dan doe je:

PHP:
1
2
3
4
5
6
7
8
9
10
$prevnummer = 0;
foreach($catarr as $nummer=>$bla)
{
  if($prevnummer)
  {
    $query = "select * from tabel where itemnr between '%prevnummer%' and '$nummer%' ";
    mysql_query($query);
    $prevnummer = $nummer;
  }
}

Copy.com


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Lol ik leer iedere dag weer wat nieuws (gelukkig)

[edit]

Dat laatste stuk
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
$prevnummer = 0;
foreach($catarray as $nummer=>$bla)
{
  if($prevnummer)
  {
    $query = "select * from tabel where itemnr between '%prevnummer%' and '$nummer%' ";
    mysql_query($query);
    $prevnummer = $nummer;
  }
}
?>

Dat krijg ik niet goed werkend. Daar lijkt helemaal niets te gebeuren namelijk, zat 1 typ foutje in maar verder niets..

[ Voor 81% gewijzigd door ViNyL op 21-07-2006 13:23 ]


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
edit:

SOLVED

[php]
$data = file('productcodes.txt');
foreach($data as $line)
{
$temparray = explode("-",$line);
$nummer = substr($temparray[0], 0, strlen($temparray[0]));
$catarray[$nummer]= $line[1];
}
$prevnummer = 1000;
foreach($catarray as $nummer=>$bla)
{
if ($nummer > 1000)
{
echo 'tussen'. $prevnummer.' en <br/>';
echo $nummer.'<br/>';
$prevnummer = $nummer;
}
}
echo 'tussen'. $prevnummer.' en MAX van tabel<br/>';
[/php]

ik heb nu het volgende (quick en dirty ter voorbeeld):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$data = file('productcodes.txt');
foreach($data as $line)
{
    $temparray = explode("-",$line);
    $nummer = substr($temparray[0], 0, strlen($temparray[0]));
    $catarray[$nummer] = $line[1];
} 
$prevnummer = 0;
foreach($catarray as $nummer=>$bla)
{
  if($prevnummer)
  {
    echo 'tussen'. $prevnummer.' en <br/>';
    echo $nummer.'<br/>';
    $prevnummer = $nummer;
  }
  else
  {
    echo '>'. $nummer.' en <br/>';
    echo $nummer.'<br/>';
    $prevnummer = $nummer;
  }
}

Wat hij nu ouput is:
code:
1
2
3
4
5
6
7
8
tussen 0 en1000

KNIP etc

tussen 6700 en7500
tussen 7500 en 8000
tussen 8000 en 9000
tussen 9000 en 9800

Maar hij moet laten zien:
code:
1
2
3
4
1000 tot 2000
2000 tot 3000
 etc
9800 en hoger...

Het is dus bijna goed, maar om het zo aan te passen lukt me maar niet. Hoe doe ik dat ?

[ Voor 42% gewijzigd door ViNyL op 21-07-2006 16:56 ]