Resultaten uitsluiten in mysql query of while lus
Kan iemand mij helpen met de onderstaande query,
het is de bedoeling dat hij alle resultaten ophaalt uit de database die aan de voorwaarde voldoen maar er moeten een aantal resultaten uit gesloten worden,
alle resultaten doe ik echoen in een while lus,
het is de bedoeling dat hij van de table members de resultaten weglaat met de zelfde waarde als $_POST['userid']
op deze manier werkt het niet
hoop dat iemand mij kan helpen
alvst bedankt
het is de bedoeling dat hij alle resultaten ophaalt uit de database die aan de voorwaarde voldoen maar er moeten een aantal resultaten uit gesloten worden,
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$searchQuery = mysqli_query($connect,"SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, connections.userid, connections.friendid FROM members, connections
WHERE members.userid <> '".$_POST['userid']."' AND compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%'
ORDER BY rand()");
?>
$searchQuery = mysqli_query($connect,"SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, connections.userid, connections.friendid FROM members, connections
WHERE members.userid <> '".$_POST['userid']."' AND compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%'
ORDER BY rand()");
?>
alle resultaten doe ik echoen in een while lus,
het is de bedoeling dat hij van de table members de resultaten weglaat met de zelfde waarde als $_POST['userid']
op deze manier werkt het niet
hoop dat iemand mij kan helpen
alvst bedankt
Operatoren hebben een volgorde. Die is niet per se van links naar rechts.
AND heeft voorang op OR.
Dus, als voorbeeld:
a=5 AND b=7 OR c=9
is het zelfde als
(a=5 AND b=7) OR (c=9)
Wat jij wil, is echter dit:
(a=5) AND (b=7 OR c=9)
Je moet dus eventueel haakjes zetten op de juiste plaats.
Voor jouw code betekent dit:
AND heeft voorang op OR.
Dus, als voorbeeld:
a=5 AND b=7 OR c=9
is het zelfde als
(a=5 AND b=7) OR (c=9)
Wat jij wil, is echter dit:
(a=5) AND (b=7 OR c=9)
Je moet dus eventueel haakjes zetten op de juiste plaats.
Voor jouw code betekent dit:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
" ... WHERE
members.userid <> '".$_POST['userid']."'
AND
(compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')"
?>
" ... WHERE
members.userid <> '".$_POST['userid']."'
AND
(compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')"
?>
Gewijzigd op 26/11/2013 14:48:04 door Kris Peeters
Bedankt voor je reactie alleen als ik dit zo aanpas dan werkt de hele query helemaal niet meer
Schrijf eens hoe de query er nu precies uitziet
excuse had een tik foutje gemaakt deze werkt nu inderdaad, Bedankt,
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$searchQuery = mysqli_query($connect,"SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, members.country, connections.userid, connections.friendid FROM members, connections
WHERE members.userid <> '".$_POST['userid']."' AND (compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')
ORDER BY rand() LIMIT 0,1");
?>
$searchQuery = mysqli_query($connect,"SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, members.country, connections.userid, connections.friendid FROM members, connections
WHERE members.userid <> '".$_POST['userid']."' AND (compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')
ORDER BY rand() LIMIT 0,1");
?>
graag gedaan
nu zoek ik nog een manier om nog meer uitzonderingen te plaatsen,
uit een andere tabel komt resultaten met id nummers al deze id's moeten ook uitgezonderd worden kan ik deze ook in de query opnemen doormiddel van een array ofzo ?
hoop dat je hier ook mee kan helpen?
alvast bedankt
uit een andere tabel komt resultaten met id nummers al deze id's moeten ook uitgezonderd worden kan ik deze ook in de query opnemen doormiddel van een array ofzo ?
hoop dat je hier ook mee kan helpen?
alvast bedankt
Dan maak je zo-iets aan:
WHERE (...) AND (...) AND (id NOT IN ( 250, 220, 170 ))
Waarbij die waarden de id's zijn van de records die je niet wil halen.
Lukt dat?
EDIT
Ik weet niet of dat veld effectief id heet. Moet je zelf uitzoeken
WHERE (...) AND (...) AND (id NOT IN ( 250, 220, 170 ))
Waarbij die waarden de id's zijn van de records die je niet wil halen.
Lukt dat?
EDIT
Ik weet niet of dat veld effectief id heet. Moet je zelf uitzoeken
Gewijzigd op 26/11/2013 16:01:59 door Kris Peeters
als ik onderstaande doe neemt hij alleen het eerste id mee die word gevonden met de andere query ,
hoe kan ik ervoor zorgen dat alle gevonden id's in een loop ofzo mee genomen worden ?
$searchQuery = mysqli_query($connect,"SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, members.country, connections.userid, connections.friendid FROM members, connections
WHERE (members.userid <> '".$_POST['userid']."') AND (members.userid NOT IN ('".$resultconnections['friendid']."')) AND (compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')
ORDER BY rand() LIMIT 0,1");
hoe kan ik ervoor zorgen dat alle gevonden id's in een loop ofzo mee genomen worden ?
$searchQuery = mysqli_query($connect,"SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, members.country, connections.userid, connections.friendid FROM members, connections
WHERE (members.userid <> '".$_POST['userid']."') AND (members.userid NOT IN ('".$resultconnections['friendid']."')) AND (compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')
ORDER BY rand() LIMIT 0,1");
Ja, op dat moment zou je een lijst aan id's moeten hebben.
$resultconnections['friendid'] is 1 id, juist?
Heb je die id's ergens in een array?
$resultconnections['friendid'] is 1 id, juist?
Heb je die id's ergens in een array?
dit is de query die de id's ( friendid ) ophaalt de lijst die hier uitkomt zou ook uitgesloten moeten worden hoe zit ik deze netjes in een array die ook in de andere query verwerkt kan worden
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$selectconnections = mysqli_query($connect,"SELECT userid,friendid FROM connections WHERE userid='".$_POST['userid']."'");
if($selectconnections == true){
($resultconnections = mysqli_fetch_array($selectconnections));
$uitgeslotenid = $resultconnections['friendid'];
}
?>
$selectconnections = mysqli_query($connect,"SELECT userid,friendid FROM connections WHERE userid='".$_POST['userid']."'");
if($selectconnections == true){
($resultconnections = mysqli_fetch_array($selectconnections));
$uitgeslotenid = $resultconnections['friendid'];
}
?>
Probeer zo eens
----
Trouwens ...
Het is altijd handig om - tijdens het schrijven van de code - de SQL string te printen.
Zo zie je of er fouten in zitten.
Je kan die print trouwens ook copy/pasten in phpMyadmin.
dus
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$res = mysqli_query($connect, "SELECT userid, friendid FROM connections WHERE userid='" . $_POST['userid'] . "'");
$id_array = array();
while ($row = mysqli_fetch_array($res)) {
$id_array[] = $row['friendid'];
}
// en nu een variabele klaar zetten voor in de SQL
$id_string = implode(',', $id_array);
...
$searchQuery = mysqli_query($connect,"SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, members.country, connections.userid, connections.friendid FROM members, connections
WHERE (members.userid <> '".$_POST['userid']."') AND (members.userid NOT IN ($id_string)) AND (compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')
ORDER BY rand() LIMIT 0,1");
?>
$res = mysqli_query($connect, "SELECT userid, friendid FROM connections WHERE userid='" . $_POST['userid'] . "'");
$id_array = array();
while ($row = mysqli_fetch_array($res)) {
$id_array[] = $row['friendid'];
}
// en nu een variabele klaar zetten voor in de SQL
$id_string = implode(',', $id_array);
...
$searchQuery = mysqli_query($connect,"SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, members.country, connections.userid, connections.friendid FROM members, connections
WHERE (members.userid <> '".$_POST['userid']."') AND (members.userid NOT IN ($id_string)) AND (compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')
ORDER BY rand() LIMIT 0,1");
?>
----
Trouwens ...
Het is altijd handig om - tijdens het schrijven van de code - de SQL string te printen.
Zo zie je of er fouten in zitten.
Je kan die print trouwens ook copy/pasten in phpMyadmin.
dus
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sql = "SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, members.country, connections.userid, connections.friendid FROM members, connections
WHERE (members.userid <> '".$_POST['userid']."') AND (members.userid NOT IN ($id_string)) AND (compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')
ORDER BY rand() LIMIT 0,1";
$searchQuery = mysqli_query($connect, $sql);
echo $sql;
?>
$sql = "SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, members.country, connections.userid, connections.friendid FROM members, connections
WHERE (members.userid <> '".$_POST['userid']."') AND (members.userid NOT IN ($id_string)) AND (compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')
ORDER BY rand() LIMIT 0,1";
$searchQuery = mysqli_query($connect, $sql);
echo $sql;
?>
Gewijzigd op 26/11/2013 16:33:41 door Kris Peeters
super bedankt dit werkt geweldig
heb weer een hoop geleerd vandaag
heb weer een hoop geleerd vandaag
Met alle respect, dit werkt wel, maar niet zoals jij denkt.
Voer deze query maar eens uit in phpMyAdmin maar dan zonder de limit.
Dit is namelijk een query met een CROSS JOIN, maar omdat je impliciet joined zie je dat niet.
Voer deze query maar eens uit in phpMyAdmin maar dan zonder de limit.
Dit is namelijk een query met een CROSS JOIN, maar omdat je impliciet joined zie je dat niet.
oke ger,
zou je mij misschien iets meer overkunnen vertellen wat er niet gaat , en hoe jij het op zou lossen ?
alvast bedankt
zou je mij misschien iets meer overkunnen vertellen wat er niet gaat , en hoe jij het op zou lossen ?
alvast bedankt
In jouw query staat:
Hiermee impliceer je een join, als je dan in de WHERE nergens hebt staan waarop gejoined moet worden bv:
Dan krijg je dus een cross join.
Maar omdat je in de eerdere query al de friend_id bij een user ophaalt heb je die connections tabel in het geheel niet nodig.
Het kan overigens gewoon in één query:
Hiermee impliceer je een join, als je dan in de WHERE nergens hebt staan waarop gejoined moet worden bv:
Dan krijg je dus een cross join.
Maar omdat je in de eerdere query al de friend_id bij een user ophaalt heb je die connections tabel in het geheel niet nodig.
Het kan overigens gewoon in één query:
Ger,
Je heb gelijk dat de table connections niet nodig is in deze query, dit had ik inderdaad al voor mezelf aangepast,
ik ben er wel achter dat hij niet naar de zoek worden kijken alle resulaten worden weergegeven behalve dan die bij de uitzonderingen staan waar hierboven al over gesproken werd,
dit is mijn query nu ,
heb je een idee waarom er niet naar de zoek woorden gekeken word ?
Je heb gelijk dat de table connections niet nodig is in deze query, dit had ik inderdaad al voor mezelf aangepast,
ik ben er wel achter dat hij niet naar de zoek worden kijken alle resulaten worden weergegeven behalve dan die bij de uitzonderingen staan waar hierboven al over gesproken werd,
dit is mijn query nu ,
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$searchQuery = mysqli_query($connect,"SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, members.country FROM members
WHERE (members.userid <> '".$_POST['userid']."') AND (members.userid NOT IN ($id_string)) AND (compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')
ORDER BY rand() LIMIT 0,1");
?>
$searchQuery = mysqli_query($connect,"SELECT members.userid AS memberuserid, members.fname, members.lname, members.proffesion, members.compname, members.compwebsite, members.compcity, members.profimage, members.country FROM members
WHERE (members.userid <> '".$_POST['userid']."') AND (members.userid NOT IN ($id_string)) AND (compname LIKE '%$searchCompname%' OR proffesion LIKE'%$searchProffesion%' OR compwebsite LIKE'%$searchCompwebsite%' OR compcity LIKE'%$searchCompcity%')
ORDER BY rand() LIMIT 0,1");
?>
heb je een idee waarom er niet naar de zoek woorden gekeken word ?
Het lijkt erop dat je dan ergens een LIKE '%%' in je query krijgt, dus dat één van die variabelen leeg is.
Vandaar dat Kris je het advies gaf je query in een variabele te zetten, zodat je dit kan controleren
Vandaar dat Kris je het advies gaf je query in een variabele te zetten, zodat je dit kan controleren
Bedankt inderdaad een goeie tip stond inderdaad een leeg veld tussen
Slapen doen we 's nachts (of niet) ;-)
Je vroeg eerder hoe ik het zou doen, en ik zou het dus met één query doen.
Je vroeg eerder hoe ik het zou doen, en ik zou het dus met één query doen.




