Jag får inte till följande SQL-sats och funktion att fungera. Problemet är nästan identiskt med det problem där jag ville skriva ut länkbokstäver högst upp på sidan för samtliga medlemmar.
Nu ska jag lägga till denna funktion under "Mina kontakter". Då skall enbart de kontakter som är tillagda i databasen för en användare skrivas ut. Jag har försökt implementera substring(t1.friendusername FROM 1 FOR 1) = '".$letter."' i WHERE-villkoret. Dock får jag det inte att fungera. När jag trycker på någon av bokstäverna högst upp visas fortfarande samtliga medlemmar. Något är skumt. Misstänker att problemet ligger i substring()... och att friendusername inte är rätt länkat mot SELECT-satsen nivån ovanför...
Några idéer?
function listMyContacts($ID, $orderby='friendusername', $sort='ASC', $letter='all') {
if ($letter == 'all') {
$sqlSelect = "SELECT DISTINCT (SELECT username FROM tblmember WHERE memberID = t1.friendID) AS friendusername, (SELECT memberID FROM tblmember WHERE memberID = t1.friendID) AS memberID, (SELECT DATE_FORMAT(last_visit, '%Y-%m-%d %H:%i') FROM tblmember WHERE memberID = t1.friendID) AS datetime, (SELECT memberID FROM tblonline WHERE memberID = t1.friendID) AS online, (SELECT activity FROM tblonline WHERE memberID = t1.friendID) AS activity FROM tblmyfriends AS t1, tblmember AS t2, tblonline AS t3 WHERE t1.memberID = $ID ORDER BY $orderby $sort";
} else if ($letter <> 'NULL') {
$sqlSelect = "SELECT DISTINCT (SELECT username FROM tblmember WHERE memberID = t1.friendID) AS t1.friendusername, (SELECT memberID FROM tblmember WHERE memberID = t1.friendID) AS memberID, (SELECT DATE_FORMAT(last_visit, '%Y-%m-%d %H:%i') FROM tblmember WHERE memberID = t1.friendID) AS datetime, (SELECT memberID FROM tblonline WHERE memberID = t1.friendID) AS online, (SELECT activity FROM tblonline WHERE memberID = t1.friendID) AS activity FROM tblmyfriends AS t1, tblmember AS t2, tblonline AS t3 WHERE t1.memberID = $ID AND substring(t1.friendusername FROM 1 FOR 1) = '".$letter."' ORDER BY $orderby $sort";
}
$RSobj = mysql_query($sqlSelect) or die (mysql_error());
return $RSobj;
}
SELECT t2.username,t2.memberID,DATE_FORMAT(t2.last_visit, '%Y-%m-%d %H:%i'),t3.activity
from tblmyfriends AS t1 join tblmember AS t2
on t1.friendId = t2.memberid
left join tblonline AS t3 on t2.memberid = t3.memberid
WHERE t1.memberID = $ID
ORDER BY $orderby $sort
SELECT t2.username,t2.memberID,DATE_FORMAT(t2.last_visit, '%Y-%m-%d %H:%i'),t3.activity
from tblmyfriends AS t1 join tblmember AS t2
on t1.friendId = t2.memberid
left join tblonline AS t3 on t2.memberid = t3.memberid
WHERE t1.memberID = $ID
ORDER BY $orderby $sort
Var kommer $letter-variabeln med i WHERE-satsen? Jag vill ju, om den är satt enbart visa alla användare som börjar med just den bokstaven.
Nu försvinner felmeddelandet men SQL-satsen som sådan gör inte det jag hade tänkt.
Det jag vill åstadkomma var att kunna högst upp under "Mina kontakter" först skriva ut begynnelsebokstäverna i form av länker för de användare jag har i min kontaktlista. Det har vi löst sedan tidigare.
Det som inte fungerar nu är att när jag trycker på en bokstav (länken ser ex. ut så här "http://www.flygfyren.nu/myprofile_contacts.php?list=F"). Då får jag fortfarande upp samtliga mina kontakter. Jag borde enbart få upp samtliga användare vars användarnamn börjar med "F".
Så här ser funktionsanropet ut:
function listMyContacts($ID, $orderby='friendusername', $sort='ASC', $letter='all') {
KOD KOD
}
$letter-variabeln är satt till "all" i funktionen när php-sidan öppnas första gången.
SELECT t2.username,t2.memberID,DATE_FORMAT(t2.last_visit, '%Y-%m-%d %H:%i'),t3.activity
FROM tblmyfriends AS t1 join tblmember AS t2 on t1.friendId = t2.memberid left join tblonline AS t3 on t2.memberid = t3.memberid
WHERE t1.memberID = 1 AND t2.username = 'all' ORDER BY friendusername ASC
I WHERE-villkoret står det att alla användarnamn som är likka med "ALL" skall vara med. Men det finns ju knappast någon användare som börjar med "ALL".
Jag anser att jag måste ha med substring(t1.friendusername FROM 1 FOR 1) = '".$letter."' som jag hade i en tidigare funktion för att visa medlemmarna bokstavsvis. Denna sql-funktion plockar ut begynnelsebokstaven för alla de medlemmar som är registrerade och grupperas svaret bokstavsvis.
Här måste jag göra på ett liknande sätt. Plocka ut enbart de användare som i det här fallet börjar på en viss bokstav som bestäms av variabeln $letter.
I WHERE-villkoret står det att alla användarnamn som är likka med "ALL" skall vara med. Men det finns ju knappast någon användare som börjar med "ALL".
Nej, du får göra en if-sats i PHP-koden som bara lägger till den delen av WHERE-satsen om värdet är något annat än all. Ändra alltså ditt isset-villkor.
Här måste jag göra på ett liknande sätt. Plocka ut enbart de användare som i det här fallet börjar på en viss bokstav som bestäms av variabeln $letter.
För att göra sökningar är det bara att använda operatorn LIKE och wildcardet %.