Haaai,
Ik zit weer even helemaal vast en ik weet even niet meer waar ik het zoeken moet, wie geeft me een tip en kan mij vertellen waar ik de mist in ga.

Ik heb twee tabellen: opdracht en afleverbedrijf
opdracht (id, titel, week, module)
afleverbedrijf (id, naam, regio, route, modules)

In een zoekopdracht word gevraagd naar de 'week' en de 'regio'


<FORM METHOD="POST" ACTION="print.php">
Week 
<input type="text" name="week" size="10"> 
Regio
<input type="text" name="week" size="10"> 

<input type="submit" name="submit2" value="Zoeken"></FORM>


Nou wil ik in de print.php een lijst hebben van opdrachten per afleverbedrijf in die bepaalde week en die bepaalde regio. So far so good, maar nou komt het: elke opdracht krijgt bepaalde modules toegewezen, deze kunnen varieren tussen A en Z en meerdere opties is ook mogelijk (vb AFJSZ), maar ook het afleverbedrijf heeft modules (vb. BCFKN). Nou moet ik iets verzinnen dat als ook maar er 1 letter overeen komt moet hij hem weergeven. ik heb nu dit, maar dat is natuurlijk niet goed omdat er nu een '=' staat en hij daarom alleen degene weergeven met de precieze lettercombinatie:


<?php 
    require("../include/config.php"); 
    mysql_connect($database[host],$database[username],$database[password]); 
    mysql_select_db($database[dbnaam]); 

$sql = "
SELECT opdracht.*, afleverbedrijf.* 
FROM opdracht, afleverbedrijf 
WHERE opdracht.module = afleverbedrijf.modules  
AND afleverbedrijf.regio LIKE '" . $_POST['regio'] . "' 
AND opdracht.week LIKE '" . $_POST['week'] . "' 
ORDER BY afleverbedrijf.route"; 
    
$query = mysql_query($sql); 

while($fetch_arr = mysql_fetch_array($query)){ 
   echo $fetch_arr[naam]. "-". $fetch_arr[titel]."-". $fetch_arr[module]."-". $fetch_arr[modules]."-". $fetch_arr[route]."-". $fetch_arr[regio]."-". $fetch_arr[week]."<BR><BR>";
}
?> 



Wie kan mij een zet geven in de goede richting, want ik zit op het moment even in een draaimolen en kom er niet vanaf!!

Thanxxx!
Probeer eens

LIKE '%".$_POST['ding']."%'

De % staat voor iets, dus als je alles met een B wilt hebben, en je hebt KSBJJL, dan geeft ie nu ook KSBJJL weer. Volgens mij als het BGSL is, geeft ie het ook weer, maar daar ben ik niet helemaal zeker van.
Dank voor je onwijze snelle reactie! dat geeft de burger moed
;-)

Volgens mij werkt het niet wat jij zegt omdat je niet aangeeft dat er een 'B' in moet zitten. Maar hij geeft aan: de opdracht heeft 'BFJK' en het afleverbedrijf heeft 'ABLZ' omdat er bij allebei een B inzit moet hij hem weergeven.


WHERE opdracht.module = afleverbedrijf.modules


of maak ik nu een denkfout...
Dan zou je voor elke module een losse kolum moeten hebben met of het bedrijf die wel of niet bevat
Daar was ik al bang voor, dat zijn dus 26 kolommen per tabel, ik hoopte zo dat het op een andere manier op te lossen was....
en dan krijg ik waarschijnlijk in de code:


WHERE opdracht.A = afleverbedrijf.A 
OR opdracht.B = afleverbedrijf.B
OR opdracht.C = afleverbedrijf.C
...
...
...
OR opdracht.Z = afleverbedrijf.Z


*zucht*
Het aangeven of er een B in moet zitten, was in mijn voorbeeld met de $_POST['ding']. Deze moet dan de waarde 'b' bevatten. Dit kan elke willekeurige string zijn, of een gewoon teken (dan wel even ". en ." weghalen).
@Jorik: maar als je dus nu de variabele : ABCFG hebt, vind ie dan ook CKLMN ?
Jongens , ben er nog steeds niet uit.... en ik probeer er eigenlijk alles aan te toen om niet in twee tabellen 26 kolommen toe te voegen.
Maar ik zat te denken, als ik er nou een IF -ELSE ding van maak. Het werkt nog niet maar waarschijnlijk zet ik iets verkeerd in de code:


 if ("opdracht.module LIKE '%A%' AND afleverbedrijf.modules LIKE '%A%'" ) {
			echo("Test A");
		}
		else {
			echo("Test geen A");
		}


Zou zoiets kunnen gaan werken?
Je moet ook niet in 2 tabellen 26 kolommen toevoegen, je kan beter een koppeltabel maken, die er zo uit zou moeten zien:

ID - BedrijfsID - ModuleID

Hier kan je heel gemakkelijk modulen inzetten. Wat je ook kan proberen is het volgende:

<?php
$variable = "abcde";
$aantal = strlen($variable);

for($i=0;$i<$aantal;$i++){
if($i == 0){
$where = " WHERE opdracht.module LIKE '%".substr($variable,$i,1)."%'";
}
else{
$where .= " OR opdracbt.module LIKE '%".substr($variable,$i,1)."%'";
}
}
?>

Op deze manier stel je je where clause dynamisch samen, hij vind dan alles waar 1 van de letters van de zoekopdracht in voorkomt. Nog een GROUP BY toevoegen, of een distinct, dat die allleen maar 1 resultaat geeft, en niet dat ene bedrijf 3 keer voorkomt als 3 letters overeen komen.
Ik zie het niet meer zitten.... Kan het gewoon niet uitstaan dat het me niet lukt!! Robert, ik heb geprobeerd wat je hierboven schetst, maar helaas lukt me het niet om het pratende te krijgen.

Ik heb een koppeltabel gemaakt, maar moet daar dan ook niet een opdrachtID bij komen te staan? Heb nu zo'n tabel gemaakt en maar nu?!


CREATE TABLE `koppel_module` (
  `id` int(11) NOT NULL auto_increment,
  `id_afleverbedrijf` int(11) NOT NULL default '0',
  `id_opdracht` int(11) NOT NULL default '0',
  `mod` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Maar en nu....

AARARARARGGGGHHHHH IK WEET HET NIET MEER!!!!!!

Reageren