Archief - algoritme (PHP): AND + OR results in 1 array

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

JohnBeton

Legacy Member
queries:
OR query: select thread_id,user_id where text like "a" or text like "b" or text like "c";
AND query: select thread_id,user_id where text like "b" and text like "c";

Nu zouden de resultaten van beide queries in 1 array moeten geraken, waarbij dubbele resultaten maar 1 keer worden opgenomen...

Ik heb de phpmanual doorzocht en enkele functies gevonden waarvan ik dacht dat ze mij zouden kunnen helpen, maar ze doen niet echt wat ik wil OF ik geen de verkeerde argumenten mee :s

Normaal kan dit trouwens toch ook met SQL? Maar Mysql wil mijn SQL niet aanvaarden :angry:

Alvast bedankt

Kn0t

Legacy Member
waarom niet gewoon met 1 query werken?

SELECT DISTINCT thread_id,user_id WHERE (text LIKE "a" OR text LIKE "b" OR text LIKE "c") OR (text LIKE "b" AND text LIKE "c");

|t3st

Legacy Member
Kn0t zei:
waarom niet gewoon met 1 query werken?

SELECT DISTINCT thread_id,user_id WHERE (text LIKE "a" OR text LIKE "b" OR text LIKE "c") OR (text LIKE "b" AND text LIKE "c");

domme query aangezien alles met een a of b of c hebt en dan ga ge nog controleren OF ze b en c bevatten (alst nie is wordenz e toch genomen)

voor 1 query-fetch uit en steek die in array($zoon[])
steek dan die array in een bovenliggende array ($papa['AND']=$zoon;)
en dan zo doe ge da me de tweede ook en steekt ge $zoon2['OR'] ook in $papa

en nadien uitlezen he

greetz Sluttie

Cakeman

Legacy Member
Eventjes improviseren. De code zal dus waarschijnlijk niet foutloos zijn, maar je hebt alvast een idee.

PHP:
$query = "SELECT distinct thread_id, user_id FROM table WHERE text LIKE 'a' OR text LIKE 'b' OR text LIKE 'c'";
$res = mysql_query($query);
while($fetched = mysql_fetch_array($res) {
	$array[] = $fetched; 
}

$query = "SELECT distinct thread_id, user_id FROM table WHERE text LIKE 'b' AND text LIKE 'c'";
$res = mysql_query($query);
while($fetched = mysql_fetch_array($res) {
	$gevonden = false
	foreach($array as $value) {
		if(($value['thread_id'] = $fetched['thread_id']) && ($value['user_id'] = $fetched['user_id'])) {
			$gevonden = true;
		}
	}
	if(!$gevonden) {
		$array = $fetched;
	}
}

Kn0t

Legacy Member
Ja da is ne domme query, maar als hij ze allebei apart doet komt het op zelfde neer hé :)

Code van Cakeman: in de if() de enkele = vervangen door dubbele== ,
en bij de tweede if $array vervangen door $array[]

Cakeman

Legacy Member
dJeez zei:
Door in_array te gebruiken misschien? :ironic:
Het wordt blijkbaar tijd dat ik mij eens ga verdiepen in die array functies :)

Bedankt Kn0t. Die == vergeet ik jammer genoeg zeer vaak. Net zoals ik steeds weer for($i = 0; i <= 10; i++) schrijf in plaats van for($i = 0; $i <= 10; $i++). Ik raak het maar niet afgeleerd :)

JohnBeton

Legacy Member
dJeez zei:
Door in_array te gebruiken misschien? :ironic:
Mja, dan moet ik dus voor elk element uit array1 met in_array checken of die in array2 zit?

Nuja, is wel te doen natuurlijk...

Zal wel niet supertraag zijn veronderstel ik :-)


MOD: alles ziet er ok uit :)

dJeez

Legacy Member
JohnBeton zei:
Mja, dan moet ik dus voor elk element uit array1 met in_array checken of die in array2 zit?

Neen, checken met in_array voor je 't element opneemt in je resultaat bij het afhandelen van de 2e query.

Nu ja, het nut hiervan ontgaat mij wel een beetje aangezien 1 query tot hetzelfde resultaat kan leiden, zoals hierboven reeds gezegd. Naast 't feit dat de logica mij ook ontgaat (zoals Sluttie wist te melden :p).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan