Resultaten uitsluiten in mysql query of while lus
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
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
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
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
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
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");
$resultconnections['friendid'] is 1 id, juist?
Heb je die id's ergens in een array?
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'];
}
?>
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
heb weer een hoop geleerd vandaag
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.
zou je mij misschien iets meer overkunnen vertellen wat er niet gaat , en hoe jij het op zou lossen ?
alvast bedankt
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:
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 ?
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
Je vroeg eerder hoe ik het zou doen, en ik zou het dus met één query doen.