Zover ik weet voert hij eerst de sub query uit, en zet het resultaat daar van in IN. 2 queries afaik. Kan er totaal naast zitten. Jammer dat JortK op vakantie is die weet behoorlijk wat van SQL afquote:Op dinsdag 24 juli 2007 23:25 schreef Geqxon het volgende:
Maar dan moet hij dus (in mijn geval) 6621 keer een select query uitvoeren? Ik heb wat moeite een testcase op te zetten, maar zo uit mijn hoofd lijkt dit niet bijster veel rapper.
| 1 2 3 | LEFT JOIN table2 ON table1.id=table2.id WHERE table2.id IS NULL; |
Puur SQL, of ook met PHP?quote:Op woensdag 25 juli 2007 01:09 schreef wonderer het volgende:
Hoe kan ik uitvogelen hoeveelste in een resultset een bepaald record is? Bijvoorbeeld "select from producten where klant_id='1'" en dan wil ik weten hoeveelste de barbecue is in die lijst. Is daar iets makkelijks voor?
Ook met PHP.quote:
quote:
| 1 2 3 4 5 6 7 8 9 | $i = 0; $result = executequery("blablabla"); while($row = fetchrow($result)) { $i++; echo($i . "e reccord:" . $row); } ?> |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $result = mysql_query("SELECT product FROM producten WHERE klant_id='1"); $i = 0; while ($row = mysql_fetch_assoc($result)){ if ($row['product'] == "Barbecue"){ $row_number = $i; break(); } $i++; } if (isset($row_number)){ echo "Barbecue was nummer " . $row_number . " op de lijst."; } ?> |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | require_once('anotherclass.php'); class Baap { private $linkie; public function doSomething() { echo "zomg "; var_dump($linkie); } public function __construct() { $linkie = new AnotherClass(); var_dump($linkie); echo "<br>"; } } ?> |
self::linkie ipv $linkiequote:Op woensdag 25 juli 2007 10:03 schreef DikkeSmikkel het volgende:
Ik heb niet echt een vraag over MySQL maar wel één over PHP dus... ik verwacht dat-ie hier wel mag of niet?
Ik ben een beetje met classes aan het rommelen maar ik zie net iets over het hoofd waardoor het niet werkt...Kortom, tijd voor meer ogen.
[ code verwijderd ]
Ik heb dus twee classes waarvan er één in een include zit (en dus bovenin wordt eengeroepen). Nu heb ik dus in de __construct() dat-ie de tweede classe initialiseert en deze in de private variabele pleurt. Of tenminste dat wil ik, PHP denkt daar kennelijk anders over want in de functie doSomething is $linkie dus NULL. Ik ben al waar meer aan het proberen geweest maar ik zie 't niet meer...Kan iemand ff een aanwijzing geven?
Bedankt voor je snelle antwoord!quote:Op woensdag 25 juli 2007 10:09 schreef WyriHaximus het volgende:
[..]
self::linkie ipv $linkie. Omdat linkie een member is van je class kan je hem niet als een gewonen $var opschrijven maar moet je aangeven dat je de member wilt self::var
. Of en $this->linkie kan ook maar dat vind hij niet leuk als je in je constructor zit
.
Ow en dit is het PHP en/of (My)SQL topic dus PHP dingen zijn nooit een probleem.
De __contructor wordt toch maar 1x uitgevoerd toch?quote:Op woensdag 25 juli 2007 10:22 schreef Geqxon het volgende:
In de constructor een nieuwe klasse definieëren, pas je wel op dat je geen lus krijgt?
Als je in de constructor van "Auto" een nieuw "Auto" object aan maakt, krijg je een aardige lus.quote:Op woensdag 25 juli 2007 10:28 schreef DikkeSmikkel het volgende:
[..]
De __contructor wordt toch maar 1x uitgevoerd toch?
quote:Op woensdag 25 juli 2007 10:27 schreef DikkeSmikkel het volgende:
[..]
Bedankt voor je snelle antwoord!Ik ga even verder puzzelen. Als ik er niet uit kom dan merk je dat vanzelf...
![]()
Niet als je in de constructor van de class waar je in zit die zelfde class ook weer initialiseerdquote:Op woensdag 25 juli 2007 10:28 schreef DikkeSmikkel het volgende:
[..]
De __contructor wordt toch maar 1x uitgevoerd toch?
Nee ok dan wel, maargoed dan is zit het geheel wel heel brak in elkaar.quote:Op woensdag 25 juli 2007 10:35 schreef WyriHaximus het volgende:
Niet als je in de constructor van de class waar je in zit die zelfde class ook weer initialiseerd. Dan krijg je een loop
.
| 1 2 3 | $var = new AnotherClass(); ?> |
| 1 2 3 | self::$linkie = new AnotherClass(); ?> |
| 1 2 3 | private static $linkie; ?> |
| 1 2 3 | var_dump(self::$message); ?> |
Met een LEFT JOIN met een IS NOT NULL op de gekoppelde tabel zeg je eigenlijk 'ik wil alle waarden van de gekoppelde tabellen die bestáán', en dat is dus gewoon een INNER JOINquote:Op dinsdag 24 juli 2007 22:19 schreef Geqxon het volgende:
Weer een performance vraag, maar deze keer eentje met een groter effect. Alsin: 0.2 seconden versus 8 seconden.
Een simpele query, met een LEFT JOIN op een bookmarktabel. Nu wil ik dus graag alle nieuwsartikelen zien die de user gebookmarked heeft. Dus hop, de LEFT JOIN, en dan op de koppelende ID van de bookmarktabel een IS NOT NULL. Gaat zelfs over duizenden nieuwsartikelen prima, supersnel dus.
Nu wil ik zien welke nieuwsartikelen de user niet gebookmarked heeft. (For the record: Dit zijn er minder dan de wel gebookmarkte nieuwsartikelen). Dit doe ik door een IS NULL op het koppelend ID van de bookmark tabel te zetten. Probleem dus: Dit gaat vreselijk traag...
Zou dit misschien sneller op te lossen zijn? Ik weet dat JOINS traag kunnen zijn, en hiermee is dat duidelijk te zien.
Een INNER JOIN is een goede, ik bouw mijn querys altijd met MySQL PHP op waardoor ik nog niet zo "dynamisch" dacht.quote:Op woensdag 25 juli 2007 12:45 schreef JeRa het volgende:
[..]
Met een LEFT JOIN met een IS NOT NULL op de gekoppelde tabel zeg je eigenlijk 'ik wil alle waarden van de gekoppelde tabellen die bestáán', en dat is dus gewoon een INNER JOINwat betreft de performance: heb je wel indices op de keys in beide tabellen? (dus in tabel 1 op de primary key, en in tabel 2 op de foreign key)
Bedankt, die nemen we mee.quote:Op woensdag 25 juli 2007 13:09 schreef JeRa het volgende:
@Geqxon
Je kunt altijd nog EXPLAIN gebruiken om erachter te komen wat MySQL intern doet om je query uit te voerenoutput van beide SELECTs kun je dan vergelijken.
quote:
Hm, ik had gedacht/gehoopt dat er een handigheidje voor was. Ik meende er iets over gelezen te hebben in de research van de afgelopen weken maar natuurlijk kan ik dat niet meer terugvinden. Dit lijkt me toch niet zo heel prettig voor een query met veel records...quote:
quote:Op woensdag 25 juli 2007 16:08 schreef wonderer het volgende:
[..]
[..]
Hm, ik had gedacht/gehoopt dat er een handigheidje voor was. Ik meende er iets over gelezen te hebben in de research van de afgelopen weken maar natuurlijk kan ik dat niet meer terugvinden. Dit lijkt me toch niet zo heel prettig voor een query met veel records... :{
Nou ja, bedankt ;)
| 1 2 3 4 5 | (SELECT COUNT(*) FROM employee e2 WHERE e2.emp_id <= e.emp_id AND e2.job_id = 10) AS rownumber FROM employee e WHERE job_id = 10 ORDER BY emp_id |
Daar snap ik geen reet van. Heb nu iets in elkaar geknutseld, kijken of dat werkt. Komt uiteindelijk toch op een while loop uitquote:Op woensdag 25 juli 2007 16:34 schreef Geqxon het volgende:
[..]
[ code verwijderd ]
bron
Ook een interresante methode
Je telt simpelweg het aantal records tot en met het record dat jij wilt hebben.quote:Op woensdag 25 juli 2007 21:04 schreef wonderer het volgende:
[..]
Daar snap ik geen reet van. Heb nu iets in elkaar geknutseld, kijken of dat werkt. Komt uiteindelijk toch op een while loop uitDat wou ik juist niet. Nou ja, aan de andere kant is het max aantal records waar hij doorheen moet 200, dat zal niet zoveel geheugen kosten toch?
Yeah, zo heb ik het nu. Ach ja, 't was het proberen waardquote:Op woensdag 25 juli 2007 21:30 schreef Geqxon het volgende:
[..]
Je telt simpelweg het aantal records tot en met het record dat jij wilt hebben.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | session_start(); require('sql.php'); if (session_is_registered("sess_loginnaam") && session_is_registered("sess_id")) { header("Location: admin.php"); exit; } else { $user = DB_USER; $pass = DB_PASS; $host = DB_HOST; $dbdb = DB_DATABASE; // zet het tabel en de volgende pagina $table = "gebruikers"; // nieuws.php veranderen in je eigen volgende pagina $nextpage = "admin.php"; if (!mysql_select_db($dbdb, mysql_connect($host, $user, $pass))) { echo "Connectie met database mislukt."; exit(); } // check of de user op de 'login' knop heeft gedrukt en of $loginnaam en $paswoord niet leeg zijn if ($HTTP_POST_VARS["loginnaam"] && $HTTP_POST_VARS["paswoord"]) { /* haal login gegevens uit database en check de gegevens met de ingevoerde gegevens */ $HTTP_POST_VARS["paswoord"]=md5($HTTP_POST_VARS["paswoord"]); $sql_db = "SELECT id, loginnaam, paswoord FROM $table WHERE loginnaam = '$HTTP_POST_VARS[loginnaam]' AND paswoord = '$HTTP_POST_VARS[paswoord]'"; $res_db = mysql_query($sql_db); // check of er een overeenkomst is met ingevoerde en uitgelezen bestanden if (mysql_num_rows($res_db) >= 1) { // zet de values van database in een array $row = mysql_fetch_array($res_db); // zet de sessions $sess_id = $row[id]; $sess_loginnaam = $row[loginnaam]; // registreer ze session_register($sess_id); session_register($sess_loginnaam); // 3600, session_set_cookie_params(3600); echo "Je bent nu ingelogd. Klik <a href=$nextpage>hier</a> om verder te gaan."; } /* indien er geen overeenkomst is tussen ingevoerde en uitgelezen gegevens */ else { echo "Verkeerde loginnaam of paswoord<p>"; echo "Ga <a href="$PHP_SELF">terug</a> en probeer het opnieuw."; } } // indien er niet op de 'login' knop is gedrukt else { // formulier echo "<table border=0 cellspacing=0 cellpadding=5>"; echo "<form method=POST action=$PHP_SELF>"; // loginnaam veld echo "<tr><td>Loginnaam:</td></tr>"; echo "<tr><td><input type=text name=loginnaam></td></tr>"; // space echo "<tr><td> </td></tr>"; // paswoord veld echo "<tr><td>Paswoord:</td></tr>"; echo "<tr><td><input type=password name=paswoord></td></tr>"; // space echo "<tr><td> </td></tr>"; // submit knop echo "<input type=submit name=submit value=Login>"; // sluit form & tabel echo "</form>"; echo "</table>"; } } ?> |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | session_get_cookie_params(); session_start(); if (session_is_registered($sess_loginnaam)) { echo "session_is_registered" .$sess_loginnaam.""; } if (session_is_registered($sess_id)) { echo "session_is_registered" .$sess_id.""; } if (session_is_registered("sess_loginnaam") && session_is_registered("sess_id")) { echo "gelukt!"; // hier de pagina } else { echo "niet gelukt!"; // geen rechten, niet ingelogd melding } ?> |
dacht ik al jaquote:Op woensdag 25 juli 2007 23:19 schreef SuperRembo het volgende:
Ziet eruit als een nogal achterhaald php4.0 of nog ouder scriptje. Ik zou nog ff verder zoeken als ik jou was
hmz, dan moet ik wel ff zelf klooien met mysql enzo..quote:
quote:
ken jij betere tutorials?quote:Op woensdag 25 juli 2007 23:54 schreef WyriHaximus het volgende:
[..]
![]()
Password/Username in je cookie zetten Alles in een door de server schrijf baar bestand opslaan Direct $_POST data een cookie in gooien (zo word het wel erg makkelijk om een session na te maken) .php3 Rechstreeks via post vars in een bestand data kunnen toevoegen
Maar goed leuk voorbeeld als je wilt weten hoe het werkt maar niet als je het veilig wilt doen. Just my 2 cents
.
O fuck, nu lees ik het pas.quote:Op woensdag 25 juli 2007 23:54 schreef WyriHaximus het volgende:
[..]
![]()
Password/Username in je cookie zetten Alles in een door de server schrijf baar bestand opslaan Direct $_POST data een cookie in gooien (zo word het wel erg makkelijk om een session na te maken) .php3 Rechstreeks via post vars in een bestand data kunnen toevoegen
Maar goed leuk voorbeeld als je wilt weten hoe het werkt maar niet als je het veilig wilt doen. Just my 2 cents
.
Mijn persoonlijke opinie is dat sessies er enkel zijn voor als het browservenster open staat, en dat deze vervalt zodra de user het browservenster sluit.quote:Op donderdag 26 juli 2007 00:04 schreef wonderer het volgende:
Ik had er eentje van een YAP* site (ik weet niet meer precies welke het is) die wel goed is, geloof ik.
sessie-id opslaan in sessie/cookie, opslaan in database en koppelen aan IP. Da's redelijk veilig.
Niet uit me hoofd, ben gewend dingen zelf uit te vogelenquote:
quote:
Als je de link weet te vinden is qu63 erg blij met je denk ik zoquote:Op donderdag 26 juli 2007 00:04 schreef wonderer het volgende:
Ik had er eentje van een YAP* site (ik weet niet meer precies welke het is) die wel goed is, geloof ik.
sessie-id opslaan in sessie/cookie, opslaan in database en koppelen aan IP. Da's redelijk veilig.
ik ook, maar dit lukt nu ff nietquote:Op donderdag 26 juli 2007 00:09 schreef WyriHaximus het volgende:
[..]
Niet uit me hoofd, ben gewend dingen zelf uit te vogelen.
quote:Als je de link weet te vinden is qu63 erg blij met je denk ik zo.
Zo doe ik het ook. Alleen gebruik ik de sessID voor unieke string.quote:Op donderdag 26 juli 2007 00:09 schreef Geqxon het volgende:
[..]
Mijn persoonlijke opinie is dat sessies er enkel zijn voor als het browservenster open staat, en dat deze vervalt zodra de user het browservenster sluit.
Zelf werk ik met een RememberKey. Elke keer als de user een pagina opvraagt, dan krijgt hij een enkele cookie met een unieke string. Deze unieke string sla ik ook in mijn database op, samen met zijn IP-adres.
De user opent mijn pagina weer, klopt aan met de unieke string in zijn cookie. Ik kijk naar het IP-adres, de unieke string van het cookie, zoek het op in mijn database, é voila, daar tover ik een userid vandaan. Inloggen, klaar.
Volgens mij is ie offline. Het was een Nederlandse site met "yet another PHP ..." Ik weet niet meer wat er op de plek van de puntjes moet. Tutorial? Site? Zoiets. Was volgens mij een .net domain.quote:Op donderdag 26 juli 2007 00:09 schreef WyriHaximus het volgende:
Als je de link weet te vinden is qu63 erg blij met je denk ik zo.
Dat zullen er best wat zijn die aan die beschrijving voldoenquote:Op donderdag 26 juli 2007 00:25 schreef wonderer het volgende:
[..]
Volgens mij is ie offline. Het was een Nederlandse site met "yet another PHP ..." Ik weet niet meer wat er op de plek van de puntjes moet. Tutorial? Site? Zoiets. Was volgens mij een .net domain.
Moet je wel de domeinnaam wetenquote:Op donderdag 26 juli 2007 00:28 schreef WyriHaximus het volgende:
[..]
Dat zullen er best wat zijn die aan die beschrijving voldoen. Archive.org ftw met offline sites
!
Nog wat puntjes die ik expres vergat te melden:quote:Op donderdag 26 juli 2007 00:20 schreef wonderer het volgende:
[..]
Zo doe ik het ook. Alleen gebruik ik de sessID voor unieke string.
Voordeel hiervan is dat je als admin iemand kan uitloggen (loginID uit database verwijderen) en dat je niet vaker dan een keer kan zijn ingelogd (tenzij je moeilijk gaat doen en de loginID van het ene cookie in een nieuw cookie gaat zetten).
Hoe doe je dat van die week?quote:Op donderdag 26 juli 2007 01:05 schreef Geqxon het volgende:
[..]
Nog wat puntjes die ik expres vergat te melden:Een "Rememberkey" (de unieke string) is maar een week geldig. Bij het aanmelden op de website, via een cookie of het inlogvenster, word je IP-adres in de database opgeslagen. Elke keer bij het openen van een pagina wordt $_SERVER['REMOTE_ADDR'] met het IP-adres uit de database vergelijken. Zo niet > Uitloggen.
Bij het uitgeven van de unieke string naar een cookie hou ik bij wanneer deze cookie uitgegeven / gebruikt is. Als de user een week later met deze cookie aan komt kloppen, dan kijk ik wanneer ik hij voor het laatst gebruikt is, en als dat te lang geleden is: Uitloggen.quote:
Hoe hou je dat bij dan? Kijk je naar de datum van je cookie of heb je de datum van het moment dat die string is uitgegeven in de database staan?quote:Op donderdag 26 juli 2007 01:14 schreef Geqxon het volgende:
[..]
Bij het uitgeven van de unieke string naar een cookie hou ik bij wanneer deze cookie uitgegeven / gebruikt is. Als de user een week later met deze cookie aan komt kloppen, dan kijk ik wanneer ik hij voor het laatst gebruikt is, en als dat te lang geleden is: Uitloggen.
quote:Op donderdag 26 juli 2007 01:19 schreef wonderer het volgende:
[..]
Hoe hou je dat bij dan? Kijk je naar de datum van je cookie of heb je de datum van het moment dat die string is uitgegeven in de database staan?
Je kunt ook gewoon je cookie na een week laten verlopen, toch?
quote:$sql = " UPDATE users
SET RememberIP = '".$_SERVER['REMOTE_ADDR']."',
RememberKey = '".$rememberkey."',
RememberDate = '".time()."'
WHERE ID = '".$user["ID"]."'
LIMIT 1";
$result = mysql_query($sql);
setcookie("RememberKey", $rememberkey, time()+604800);
Kleine bijkomstigheidquote:
Ah net artikelquote:Op donderdag 26 juli 2007 00:48 schreef wonderer het volgende:
Hah! Gevonden: http://www.yapf.net/
http://www.yapf.net/Articles/ArticleView/805
En dat is het artikel.
Misschien is date iets om naar te kijken? Samen met time() moet dat wel lukken denk ik :).quote:Op donderdag 26 juli 2007 10:04 schreef Erik het volgende:
Ik zit met een probleem waar ik niet uitkom:
Ik sla de invoerdatum van een factuur op in de database d.m.v. datetime (0000-00-00 00:00:00).
Nu zou ik graag met een query een overzicht maken van alle factuurnummers met als invoerdatum een dag terug, of een week geleden.
Ik heb gezocht en kwam functies tegen zoals DATE_ADD en DATE_SUB maar hiermee krijg ik het niet voor elkaar.
Kan iemand me helpen hiermee?
leesvoer!quote:Op donderdag 26 juli 2007 00:48 schreef wonderer het volgende:
Hah! Gevonden: http://www.yapf.net/
http://www.yapf.net/Articles/ArticleView/805
En dat is het artikel.
SELECT 'a' + '0x1' geeft toch echt 0 als resultaat in MySQL 5.quote:Op dinsdag 24 juli 2007 18:43 schreef Thomass het volgende:
[..]
[ code verwijderd ]
och het is zo logisch mensen
(gave site heb je trouwens)
ik snap het wel aardig geloof ik, alleen voorbeelden zeggen mij meestal meerquote:
Dat zou zo maar kunnen, maar ik had het over phpquote:Op donderdag 26 juli 2007 10:53 schreef SuperRembo het volgende:
[..]
SELECT 'a' + '0x1' geeft toch echt 0 als resultaat in MySQL 5.
Of iets als date('Y-m-d h:i:s', strtotime('-7 day'));quote:Op donderdag 26 juli 2007 10:27 schreef WyriHaximus het volgende:
[..]
Misschien is date iets om naar te kijken? Samen met time() moet dat wel lukken denk ik.
[ code verwijderd ]
Aha. De oorspronkelijke vraag ging over SQL.quote:Op donderdag 26 juli 2007 12:25 schreef Thomass het volgende:
Dat zou zo maar kunnen, maar ik had het over php
*handschud* dat ondervind ik dus ook... erg vervelend, zou graag begrijpend willen lezen maar veel stukken snap ik niet, zelfs niet na meerdere keren lezenquote:Op donderdag 26 juli 2007 10:59 schreef qu63 het volgende:
[..]
ik snap het wel aardig geloof ik, alleen voorbeelden zeggen mij meestal meer
Kijk eens naar die van phpBB, zit redelijk netjes in elkaarquote:Op donderdag 26 juli 2007 13:56 schreef Chandler het volgende:
[..]
*handschud* dat ondervind ik dus ook... erg vervelend, zou graag begrijpend willen lezen maar veel stukken snap ik niet, zelfs niet na meerdere keren lezen
Maar gelukkig zijn er nog posters die zonder problemen iets willen uitleggen!CraZaay
Jera
SuperRembo en voormalige poster
Sop
voor al die anderen die ik vergeet
Zet er eens or die(mysql_error()) achterquote:Op donderdag 26 juli 2007 14:39 schreef Qunix het volgende:
$result = @mysql_query("INSERT INTO t_nieuws VALUES ('" . $datum . "','" . $titel . "','" . $bericht . "','" . $actief . "','" . $extern . "','" . $intern . "');");
Is daar iets fout aan? Hij voer hem niet uit, ik krijg geen foutmelding.
2007-07-26 14:43:15quote:Op donderdag 26 juli 2007 14:41 schreef WyriHaximus het volgende:
[..]
Zet er eens or die(mysql_error()) achter. OW en haal de @ weg
.
Volgens mij had DirectTopics dat... www.directtopics.nl En dan de beta v5.quote:Op donderdag 26 juli 2007 14:44 schreef wonderer het volgende:
Ik wil van PHPBB eigenlijk wel meer weten hoe ze dingen doen. Ik probeer zelf een forum te scripten (als onderdeel van een hele site, netjes geintegreerd) en ik heb af en toe het idee dat ik het wiel opnieuw aan het uitvinden ben
Maar een bestaand pakket gebruiken werkt ook weer niet echt want ik wil dingen die zij niet ondersteunen (ook niet in MODs) en zelf dingen aanpassen daar is nog veel frustrerender.
Er zijn forumpakketten die bijhouden welke topics je hebt gelezen, hoe vaak je ook in- en uitlogt (dus niet zoals Fok het doet, gebaseerd op je laatste inlogtijd, maar echt of je erop geklikt hebt). Weet iemand hoe dat bijgehouden wordt? Ik kan me amper voorstellen dat er ergens in een tabel wordt bijgehouden met een n-n relatie: user-post/topic.
Iemand een idee?
Ik kan je aanraden dit format te gebruiken:quote:Op donderdag 26 juli 2007 14:39 schreef Qunix het volgende:
$result = @mysql_query("INSERT INTO t_nieuws VALUES ('" . $datum . "','" . $titel . "','" . $bericht . "','" . $actief . "','" . $extern . "','" . $intern . "');");
Is daar iets fout aan? Hij voer hem niet uit, ik krijg geen foutmelding. Ook zonder @ voor de mysql tag.
| 1 |
Dan gaat de query iig goedquote:Op donderdag 26 juli 2007 14:44 schreef Qunix het volgende:
[..]
2007-07-26 14:43:15
wedfrgthuj
poiuytre4567890
1
1
0
Geplaatst
Nieuwsitem is geplaatst.
Geen foutmelding dus... Dat boven in is wat ingevoerd is.
Ja ben je ookquote:Op donderdag 26 juli 2007 14:44 schreef wonderer het volgende:
Ik wil van PHPBB eigenlijk wel meer weten hoe ze dingen doen. Ik probeer zelf een forum te scripten (als onderdeel van een hele site, netjes geintegreerd) en ik heb af en toe het idee dat ik het wiel opnieuw aan het uitvinden ben
Maar een bestaand pakket gebruiken werkt ook weer niet echt want ik wil dingen die zij niet ondersteunen (ook niet in MODs) en zelf dingen aanpassen daar is nog veel frustrerender.
Er zijn forumpakketten die bijhouden welke topics je hebt gelezen, hoe vaak je ook in- en uitlogt (dus niet zoals Fok het doet, gebaseerd op je laatste inlogtijd, maar echt of je erop geklikt hebt). Weet iemand hoe dat bijgehouden wordt? Ik kan me amper voorstellen dat er ergens in een tabel wordt bijgehouden met een n-n relatie: user-post/topic.
Iemand een idee?
Da's wel een goeie, ja!quote:Op donderdag 26 juli 2007 14:50 schreef WyriHaximus het volgende:
Ja ben je ook. Maar goed als een ander wiel niet past onder jouw auto waarom zou je het dan gebruiken
.
Ik kan het me haast niet voorstellen (zo'n grote tabelquote:Yup dat word gewoon in een tabelletje bijgehouden vaak. (Dat het ontzettend groot word is een ander verhaal.)
* ] WyriHaximus heeft de hele source van phpbb online staan, dus als je wilt, leef je uit http://wyrihaximus.net/en-files/index-d-548-n-phpBB2_0_22.html
Net verzonnenquote:
Dat gaat gewoon ook fout na een tijdje als het te groot word. Natuurlijk is een prune functie wel handigquote:Op donderdag 26 juli 2007 15:25 schreef wonderer het volgende:
[..]
Ik kan het me haast niet voorstellen (zo'n grote tabel),
PHPBB ga ik ook eens een keer bekijken, hoewel ik meer geinteresseerd ben in hoe ze het opslaan in de database.
Gedaan zonder id voorin... maar nog doet hij het niet.. Gegevens komen goed door, hij komt in het gebied waar hij het hoort uit te voeren maar alsnog doet hij het niet in de database.quote:Op donderdag 26 juli 2007 14:47 schreef Geqxon het volgende:
[..]
Ik kan je aanraden dit format te gebruiken:
[ code verwijderd ]
Als je dan ooit een veldnaam aan je tabel toevoegd, dan weet je zeker dat alles nog goed loopt.
* WyriHaximus pakt de kruip olie alvastquote:Op donderdag 26 juli 2007 15:48 schreef wonderer het volgende:
*probeert left join te snappen*
Serieus, volgens mij heb ik een redacteur nodig. Mijn SQL skills zitten al 8 jaar op hetzelfde niveauDat kan allemaal veel handiger volgens mij...
http://www.w3schools.com/sql/sql_join.aspquote:Op donderdag 26 juli 2007 15:48 schreef wonderer het volgende:
*probeert left join te snappen*
Serieus, volgens mij heb ik een redacteur nodig. Mijn SQL skills zitten al 8 jaar op hetzelfde niveauDat kan allemaal veel handiger volgens mij...
Vooral wanneer ik het moet gebruiken. De syntax is niet zo heel lastig, maar het nut. En werkt het alleen met twee verschillende tabellen?quote:Op donderdag 26 juli 2007 15:52 schreef WyriHaximus het volgende:
[..]
* WyriHaximus pakt de kruip olie alvast
Anyway vertel. Wat snap je niet?
In feite can kan oneindig aantal tabellen met left join koppelenquote:Op donderdag 26 juli 2007 16:03 schreef wonderer het volgende:
[..]
Vooral wanneer ik het moet gebruiken. De syntax is niet zo heel lastig, maar het nut. En werkt het alleen met twee verschillende tabellen?
Ik heb alle lagen forum (dus categorieen, subfora, startpost en replies) in dezelfde tabel staan en het level van elke entry geeft weer wat het is. Leek me handiger dan vier aparte tabellen met voornamelijk dezelfde velden. Zou ik daar eventueel (als ik erachter kom waar ik het voor kan gebruiken) gebruik kunnen maken van left join?
Dus eigenlijk vraag ik me af: welke situatie zal eerder om een left join vragen, dan bijvoorbeeld twee aparte queries.
Hm.quote:Op donderdag 26 juli 2007 15:52 schreef Geqxon het volgende:
[..]
http://www.w3schools.com/sql/sql_join.asp
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | $result1=runquery("SELECT * FROM user_profile WHERE username=".quote_smart($user,$d),$d); $result2=runquery("SELECT * FROM user_data WHERE username=".quote_smart($user,$d),$d); $result3=runquery("SELECT * FROM user_prefs WHERE username=".quote_smart($user,$d),$d); $result4=runquery("SELECT * FROM users WHERE username=".quote_smart($user,$d),$d); $result5=runquery("SELECT * FROM user_extras WHERE username=".quote_smart($user,$d),$d); $row1=mysql_fetch_array($result1); $row2=mysql_fetch_array($result2); $row3=mysql_fetch_array($result3); $row4=mysql_fetch_array($result4); $row5=mysql_fetch_array($result5); ?> |
Ja.quote:Op donderdag 26 juli 2007 16:07 schreef wonderer het volgende:
[..]
Hm.
Dus iets als
[ code verwijderd ]
zou met een join kunnen? Met een query tegelijk alle noodzakelijke dingen uit meerdere tabellen halen?
hmz, pagina begint met wat php-errorsquote:Op donderdag 26 juli 2007 14:06 schreef WyriHaximus het volgende:
[..]
Kijk eens naar die van phpBB, zit redelijk netjes in elkaar. Komt zo ff link naar de source, upload is wat traag op me werk
. http://wyrihaximus.net/en(...)-n-sessions_php.html
Ik heb hier dus al enkele topics mee bevuild, maar om het dan toch een keertje op te takelen:quote:Op donderdag 26 juli 2007 16:03 schreef wonderer het volgende:
[..]
Vooral wanneer ik het moet gebruiken. De syntax is niet zo heel lastig, maar het nut. En werkt het alleen met twee verschillende tabellen?
Ik heb alle lagen forum (dus categorieen, subfora, startpost en replies) in dezelfde tabel staan en het level van elke entry geeft weer wat het is. Leek me handiger dan vier aparte tabellen met voornamelijk dezelfde velden. Zou ik daar eventueel (als ik erachter kom waar ik het voor kan gebruiken) gebruik kunnen maken van left join?
Dus eigenlijk vraag ik me af: welke situatie zal eerder om een left join vragen, dan bijvoorbeeld twee aparte queries.
Liep idd ff te kutten ja met de functie die voor de source parsing and highligthing zorgt aangezien de text van de code wat klein isquote:Op donderdag 26 juli 2007 16:11 schreef qu63 het volgende:
[..]
hmz, pagina begint met wat php-errors
verder ziet het wel ok uit
En dat kan ik dan met een enkele fetch_array ophalen? wordt het dan iets van $row["users.last_visit"] en $row["user_data.first_name"]?quote:
Ik wil in zoverre meer dan standaard dat geen enkel bestaand pakket alles heeftquote:Op donderdag 26 juli 2007 16:13 schreef Chandler het volgende:
Zo ie zo vind ik dat de meeste bulletinboards te veel mogelijkheden hebben. Een standaard forum is bijna niet meer te vinden.
Waar je simpel en alleen kunt registreren, posten enzo. Heb zelf ooit ook een forum geschreven (wie niet?) ennuh moet zeggen dat het niet echt heel moeilijk is hoor. Tenzij je meer wilt dan 'standaard'
Oh damn. Volgens mij moet ik echt alles wat ik tot nu toe heb omgooienquote:Op donderdag 26 juli 2007 16:13 schreef Geqxon het volgende:
[..]
Ik heb hier dus al enkele topics mee bevuild, maar om het dan toch een keertje op te takelen:
In het systeem dat ik aan het bouwen ben kunnen gebruikers een nieuwsartikel bookmarken. Ik plaats dan een record in de bookmark tabel met het userid en het nieuwsartikel-id.
In het nieuwsoverzicht wil ik dat de gebruikers bij elk nieuwsartikel zien of ze deze al gebookmarked hebben of niet. Nu kan ik bij elk nieuwsartikel het in de database opzoeken, maar ik maak gebruik van een left join. Als bij het nieuwsartikel-ID een bookmark is geplaatst (en dat dus in de bookmarktabel staat), dan komt hij er keurig bij te staan, en als die er niet is, staat er NULL.
Zo kan ik bijna de complete pagina in 1 query ophalen.
Jep, alles wordt in een array gestopt. :)quote:Op donderdag 26 juli 2007 16:14 schreef wonderer het volgende:
[..]
En dat kan ik dan met een enkele fetch_array ophalen? wordt het dan iets van $row["users.last_visit"] en $row["user_data.first_name"]?
| 1 2 3 | print_r($array); ?> |
Ja, maar je moet wel gaan specificeren welke velden je wiltquote:Op donderdag 26 juli 2007 16:14 schreef wonderer het volgende:
[..]
En dat kan ik dan met een enkele fetch_array ophalen? wordt het dan iets van $row["users.last_visit"] en $row["user_data.first_name"]?
dus users.* werkt niet?quote:Op donderdag 26 juli 2007 16:19 schreef WyriHaximus het volgende:
[..]
Ja, maar je moet wel gaan specificeren welke velden je wilt. En je kunt ook user_data.first_name AS firstname en dan zal die firstname in je $row heten
.
dat vond ik ook al jaquote:Op donderdag 26 juli 2007 16:13 schreef WyriHaximus het volgende:
[..]
Liep idd ff te kutten ja met de functie die voor de source parsing and highligthing zorgt aangezien de text van de code wat klein is![]()
quote:Thanks!
Word aan gewerktquote:
quote:
Jawel maar als je 2 keer de zelfde ga je errors krijgenquote:
You asked for it... :')quote:Op donderdag 26 juli 2007 16:31 schreef Geqxon het volgende:
wonderer, dump eens een lap code waarvan je denkt dat het korter kan. :)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | function profile_form($user,$element) { global $days, $months; $d=connectDB(); $result1=runquery("SELECT * FROM user_profile WHERE username=".quote_smart($user,$d),$d); $result2=runquery("SELECT * FROM user_data WHERE username=".quote_smart($user,$d),$d); $result3=runquery("SELECT * FROM user_prefs WHERE username=".quote_smart($user,$d),$d); $result4=runquery("SELECT * FROM users WHERE username=".quote_smart($user,$d),$d); $result5=runquery("SELECT * FROM user_extras WHERE username=".quote_smart($user,$d),$d); $row1=mysql_fetch_array($result1); $row2=mysql_fetch_array($result2); $row3=mysql_fetch_array($result3); $row4=mysql_fetch_array($result4); $row5=mysql_fetch_array($result5); $bd=explode("-",$row2["birthday"]); $day=$bd[2]; $month=$bd[1]; $year=$bd[0]; $days=select_list('profileform[user_day]',$day,$days); $months=select_list('profileform[user_month]',$month,$months); if($row2["user_sex"]=="f"){$sf='checked';} elseif($row2["user_sex"]=="m"){$sm='checked';} elseif($row2["user_sex"]=="t"){$st='checked';} if($row3["email_public"]=='1'){ $pb=' checked'; } else{ $pv=' checked'; } if($row3["smilies"]=='1'){ $sb=' checked'; } else{ $sv=' checked'; } $res=runquery("SELECT * FROM user_avatars WHERE username=".quote_smart($user,$d),$d); while($av=mysql_fetch_array($res)){ $ava=$av["avatar_ID"].'.'.$av["extension"]; if($av["avatar_ID"]==$row2["user_avatar"]){ $checked=' selected'; } else{ $checked=''; } $select .= '<option value="'.$ava.'"'.$checked.'>'.$ava.'</option>'; } if(mysql_num_rows(runquery("SELECT * FROM user_inventory WHERE item_ID='3' AND username=".quote_smart($user,$d),$d))=='1'){ $fe_custom_color='<select name="profileform[custom_color]" id="kleur" style="background-color:#000000;color:#ffeeee;">'.generate_colors($row5["custom_color"]).'</select> Eigen kleurtje <br />'; } else{ $fe_custom_color='Eigen kleurtje: <span style="color:#'.$row5["custom_color"].'">'.$row5["custom_color"].' (<a href="shop.php">aanpassen</a>)</span><br />'; } if(mysql_num_rows(runquery("SELECT * FROM user_inventory WHERE item_ID='4' AND username=".quote_smart($user,$d),$d))=='1'){ $fe_custom_tag='<input type="text" class="text" name="profileform[custom_tag]"> Eigen tag <br />'; } else{ $fe_custom_tag='Eigen tag: '.$row5["custom_tag"].' (<a href="shop.php">aanpassen</a>)<br />'; } if(mysql_num_rows(runquery("SELECT * FROM user_inventory WHERE item_ID='7' AND username=".quote_smart($user,$d),$d))=='1'){ $fe_custom_sig='In je handtekening mogen plaatjes van maximaal 400 pixels breed en 60 pixels hoog. Het totaal aantal tekens mag de 250 niet overschrijden, inclusief BBCode. Op de inhoud zijn de algemene voorwaarden van toepassing. <br />'; $fe_custom_sig.='<textarea name="profileform[custom_sig]" style="width:285px;height:60px;" class="sig">'.stripslashes($row5["custom_sig"]).'</textarea>'; } else{ $fe_custom_sig='Je hebt geen handtekening. Ga naar de <a href="shop.php">shop</a> om deze mogelijkheid te benutten.<br />'; } if(mysql_num_rows(runquery("SELECT * FROM user_inventory WHERE item_ID='6' AND username=".quote_smart($user,$d),$d))=='1'){ $change_name='1'; } if($row2["user_alias"]==$user || $row2["user_alias"]==''){ $fe_alias='<input type="text" class="text" name="profileform[user_alias]" value="'.$user.'"> Chatnaam <br />'; } elseif($change_name=='1'){ $fe_alias='<input type="text" class="text" name="profileform[user_alias]" value="'.$row2["user_alias"].'"> Chatnaam <br />'; } else{ $fe_alias=format_username($user).' (Chatnaam <a href="">veranderen</a>)<br />'; } $fe_avatar='<select class="actielijst" name="profileform[user_avatar]"><option value="">Geen avatar</option> '.$select.'</select> <a href="members.php?c=avatars">Upload nieuwe avatar</a><br />'; $fe_color='<select name="profileform[user_color]" id="kleur" style="background-color:#000000;color:#ffeeee;">'.generate_colors($row2["user_color"]).'</select> Chatkleur <br />'; $fe_bio='Vertel hier iets over jezelf. Geen chatlogs, geen ASCII geknutsel, geen verhalen, gedichten, songteksten etc.<br />'; $fe_bio.=show_toolbar('user_bio'); $fe_bio.='<textarea id="user_bio" class="user_bio" name="profileform[user_bio]">'.stripslashes($row1["user_bio"]).'</textarea>'; $fe_bio.='<script>write_toolbar('user_bio');</script>'; $fe_homepage='<input type="text" class="text" name="profileform[user_page]" value="'.$row1["user_page"].'"> URL van je homepage <br />'; $fe_msn='<input type="text" class="text" name="profileform[user_msn]" value="'.$row1["user_msn"].'"> Je MSN-adres <br />'; $fe_wp='<input type="text" class="text" name="profileform[user_whatpulse]" value="'.$row1["user_whatpulse"].'"> Whatpulse username <br />'; $fe_email='<input type="text" class="text" name="profileform[email]" value="'.$row4["email"].'"> E-mailadres<br />'; $fe_first_name='<input type="text" class="text" name="profileform[first_name]" value="'.$row2["first_name"].'"> Voornaam<br />'; $fe_last_name='<input type="text" class="text" name="profileform[last_name]" value="'.$row2["last_name"].'"> Achternaam<br />'; $fe_location='<input type="text" class="text" name="profileform[location]" value="'.$row2["location"].'"> Woonplaats<br />'; $fe_country='<input type="text" class="text" name="profileform[country]" value="'.$row2["country"].'"> Land<br />'; $fe_birthday=$days.' - '.$months.' - <input type="text" class="text" size="4" maxlength="4" name=profileform[user_year]" value="'.$year.'"><br />'; $fe_sex='<input type="radio" name="profileform[user_sex]" value="m" '.$sm.'> Jongen <input type="radio" name="profileform[user_sex]" value="f" '.$sf.'> Meisje<br /><input type="radio" name="profileform[user_sex]" value="t" '.$st.' style="display:none;">'; $fe_prefs=' <table class="prefs"> <tr><td>Email-adres</td> <td><input type="radio" value="1" name="profileform[email_public]"'.$pb.'> Openbaar</td> <td><input type="radio" value="0" name="profileform[email_public]"'.$pv.'> Privé</td></tr> <tr><td>Smilies</td> <td><input type="radio" value="1" name="profileform[smilies]"'.$sb.'> Aan</td> <td><input type="radio" value="0" name="profileform[smilies]"'.$sv.'> Uit</td></tr> </table>'; $formheader='<form class="profile_form" method="post" action="?c=submit_profile">'; $submit='<input type="hidden" name="profileform[username]" value="'.$user.'"><input type="submit" class="submit" name="submit_profile" value="opslaan" accesskey="s">'; $formfooter='</form>'; $link='<a href="?c=profile&user='.$user.'">Bekijk je profiel</a>'; switch($element){ case '1': #bio $form=$formheader.$fe_bio.$submit.$formfooter; break; case '2': #contact $form=$formheader.$fe_homepage.$fe_msn.$fe_wp.$fe_email.$submit.$formfooter; break; case '3': #persoonlijk $form=$formheader.$fe_first_name.$fe_last_name.$fe_location.$fe_country.$submit.$formfooter; break; case '4': #geb. datum/sexe $form=$formheader.$fe_birthday.$fe_sex.$submit.$formfooter; break; case '5': #chatstuff $form=$formheader.$fe_alias.$fe_avatar.$fe_color.$submit.$formfooter; break; default: $form=$formheader.'<div class="prof_left"> <fieldset class="prof"><legend>Contactgegevens</legend>'.$fe_homepage.$fe_msn.$fe_wp.$fe_email.'</fieldset> <fieldset class="prof"><legend>Persoonlijk</legend>'.$fe_first_name.$fe_last_name.$fe_location.$fe_country.$fe_birthday.$fe_sex.'</fieldset> <fieldset class="prof"><legend>Chatstuff</legend>'.$fe_alias.$fe_avatar.$fe_color.'</fieldset> <fieldset class="prof"><legend>Instellingen</legend>'.$fe_prefs.'</fieldset> <fieldset class="prof"><legend>Extra's</legend>'.$fe_custom_tag.$fe_custom_color.$fe_custom_sig.'</fieldset> '.$submit.'</div> <div class="prof_right"><fieldset class="prof"><legend>Biografie</legend>'.$fe_bio.'</fieldset></div>'.$formfooter; break; } return $form; } ?> |
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |