1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $query = " SELECT * FROM bookmark_cat, bookmark_links WHERE bookmark_cat.id = bookmark_links.cat_id GROUP BY cat_id"; $result = mysql_query($query) or die (mysql_error()); while($row = mysql_fetch_array($result)) { echo '<h2>'. $row['cat_naam'] . '</h2>'; echo '<p>' . $row['naam'] . '</p>'; } ?> |
1 2 3 4 5 6 7 8 | link 1 CAT NAAM 1 link 2 CAT NAAM 1 link 3 |
1 2 3 4 5 6 7 8 | link 1 link 2 link 3 CAT NAAM 2 link 4 link 5 |
Je query kun je zo laten. Maar je hele probleem is toch dat je de header maar één keer wilt weergeven? Als je nou eens de header in het loopje telkens opslaat in een variabele en de header alleen weergeeft als ie niet meer overeenkomt met wat er in de variabele staat?quote:Op dinsdag 12 december 2006 11:25 schreef super-muffin het volgende:
hm ja, ik had eerst een query in een while loop. Maar dat lijkt me te server belastend. Ik dacht dat er wel een andere manier moet zijn.
Dat komt omdat je $titel éérst vult met de header en daarna controleert of het verschilt met de header. (:?)quote:Op dinsdag 12 december 2006 12:18 schreef super-muffin het volgende:
Zoals dit? :?
Dit staat in de while loop:
[ code verwijderd ]
Dan krijg ik geen headings.
1 |
1 2 3 4 5 | { $titel = $row['cat_naam']; echo '<h2>etc</h2>'; } |
Een aanroep naar unlink() is in Windows weinig meer dan een wrapper om de API-call om een bestand te verwijderen. Kennelijk vindt Windows dat de gebruiker waaronder IIS wordt uitgevoerd niet genoeg rechten heeft om het bestand te verwijderenquote:Op dinsdag 12 december 2006 15:23 schreef papernote het volgende:
Ik draai PHP 5 op Windows Server 2003 R2 met IIS 6.0. Maar ik heb een probleem met het verwijderen van bestanden. De unlink() functie wil niet werken, wegens een "permission denied".
Ik heb de IIS user Full Control gegeven over alle bestanden in de wwwroot. Ik heb zelfs Everyone Full Control gegeven over de wwwroot. Beide werkt niet.quote:Op dinsdag 12 december 2006 15:31 schreef JeRa het volgende:
[..]
Een aanroep naar unlink() is in Windows weinig meer dan een wrapper om de API-call om een bestand te verwijderen. Kennelijk vindt Windows dat de gebruiker waaronder IIS wordt uitgevoerd niet genoeg rechten heeft om het bestand te verwijderendus hoe zit het met de permissies van gebruikers op het bestand dat je wilt verwijderen?
Ben ik nou topickiller?quote:Op dinsdag 12 december 2006 17:06 schreef fokME2 het volgende:
Ben voor mijn school bezig met een filebeheer te maken. Het probleem is echter dat dit via het netwerk gaat.
Het uitlezen van de bestanden gaat perfect "//server/bla/leerlingmap", echter bij het uploaden van files gaat het fout. Dan krijg ik een "permission denied", de server kan wel mappen aanmaken?
De pc waarop de Apache server draait met PHP5 heeft alle rechten op de netwerkmap.
Heeft iemand hier ervaringen/tips/oplossingen met/voor dit probleem?
Beetje welquote:
Probeer mbv php en move_uploaded_file(), of copy() de file te verplaatsen. Dan krijg ik de errorquote:Op woensdag 13 december 2006 20:19 schreef JeRa het volgende:
Hoe upload je je bestanden? Welke functies, waar worden de tijdelijke bestanden opgeslagen, etc?
[..]
Beetje wel
Dat lees ik net op php.net. Weet iemand of je bij Apache misschien het netwerkpath zou moeten instellen? En of dat uberhaupt kan?quote:On windows I made the directory writable, by changing the Apache httpd.conf file.
The problem I had, was with the upload directory. The move_uploaded_file produced an error like: failed to open stream: Permission denied.
I changed my php.ini to specify an upload directory:
upload_tmp_dir = "d:/temp/php/uploads/"
and I added the following in the Apache hpptd.conf file:
<Directory "D:/temp/php/uploads">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
restarted Apache, and the upload succeeded.
1 2 3 4 | --------+-----------+-------- 1 | Smaak | 0 2 | Test | 1 |
1 2 3 4 5 6 7 | -----------------+----------------------+------- 1 | Smaakt uw vlees | 1 2 | Smaakt uw koffie | 1 3 | Smaakt uw groente | 1 4 | Testvraag 1 | 2 5 | Testvraag 2 | 2 |
1 2 3 4 5 6 7 8 9 10 11 | ---------------+-------+-----------+------- 1 | 1 | 2 | ip van voter 2 | 1 | 2 | 3 | 1 | 1 | 4 | 1 | 1 | 5 | 1 | 1 | 6 | 1 | 2 | 7 | 2 | 1 | 1 | 2 | 1 | 1 | 2 | 2 | |
1 2 3 | SELECT Question, COUNT(Question) as vote FROM Poll_Answers WHERE Poll=".$poll." GROUP BY Question ?> |
1 2 3 | SELECT q.Question, COUNT(a.Question) as vote FROM Poll_Questions q JOIN Poll_Answers a ON (q.Poll=a.Poll) WHERE a.Poll=".$poll." GROUP BY a.Question ?> |
PHP draait als apart proces met de rechten van de gebruiker van de webserver, dus daar hoef je niet voor in httpd.conf te zijn. Lukt het je wel om de bestanden in een lokale map (op de eigen harde schijf) op te slaan?quote:Op woensdag 13 december 2006 21:01 schreef fokME2 het volgende:
[..]
Dat lees ik net op php.net. Weet iemand of je bij Apache misschien het netwerkpath zou moeten instellen? En of dat uberhaupt kan?![]()
Ik kom er vanavond even op terug, ik zit voornamelijk nog met hoe ik een count van rijen kan koppelen aan 1 vraag uit de andere tabel in m'n query. Je performance verhaal lees ik even als ik niet meer op mijn werk zit. Het database model kan nu nog volledig op de schopquote:Op donderdag 14 december 2006 08:38 schreef JeRa het volgende:
@Swetsenegger
Een normale LEFT JOIN (== LEFT OUTER JOIN) zou afdoende moeten zijn. Je hebt gelijk dat er geen relatie hoeft te bestaan, dus pak je de tabel met de rijen die je wilt hebben (de questions) en join je daar hetgene op waar je informatie over wilt hebben (de answers). Let wel op dat je formeel een NULL-waarde krijgt van MySQL in het geval dat er geen rijen gevonden zijn bij een bepaalde question.
Verder een tip voor Poll_Answers; als je Poll_Answer_Id dropt en een PRIMARY KEY op de kolommen (IP, Poll) legt dan zorg je ervoor dat er in MySQL een restrictie komt: elk IP-adres kan maar één keer op één bepaalde poll stemmen.
En over het algemeen zal deze opzet niet de snelste qua performance zijn; MySQL is niet zo geweldig met GROUP BY's (zelfs niet als je de juiste indices aanlegt). Persoonlijk zou ik een aparte tabel hebben gemaakt met de scores per antwoord op een poll zodat je die simpel kunt incrementen bij een stem. Je Poll_Answers-tabel kun je dan zo versimpelen Dat je 'IP' en 'Poll' overhoudt (inclusief de eerder genoemde PRIMARY KEY natuurlijk).
Dan ben je erg beperkt met vertalenquote:Op donderdag 14 december 2006 10:48 schreef ViPeRII het volgende:
Lol dat is nooit een class. Dat is een lijst met woorden die vertaalt worden.
Nope. Lijkt me ook raar nu de paar beste (en zelfs dan nog matige) oplossingen commerciëel zijnquote:Op donderdag 14 december 2006 10:45 schreef wipes66 het volgende:
Kent iemand toevallig een class die tekst kan vertalen naar duits en engels?
Dit kan vrij simpel omdat je telkens maar één poll opvraagt. Je koppelt de stemmen aan de vragen:quote:Op donderdag 14 december 2006 11:05 schreef Swetsenegger het volgende:
[..]
Ik kom er vanavond even op terug, ik zit voornamelijk nog met hoe ik een count van rijen kan koppelen aan 1 vraag uit de andere tabel in m'n query.
1 |
1 |
Een PRIMARY KEY is niets anders dan een UNIQUE INDEX met een extra tagje zodat je bij natural joins niet hoeft aan te geven hoe je tabellen koppelt. Een INDEX kun je gewoon over meerdere kolommen leggen, dat heb ik een tijd geleden in deze topicreeks redelijk uitgebreid besproken. UNIQUE zorgt ervoor dat je altijd unieke combinaties van die kolommen moet hebben. In het geval van de combinatie IP,PollID is dat dus een unieke combinatie van IP-adres en Poll-ID voor een stemquote:-edit- oeh, je primary key tip voor de poll answers tabel is wel een goeie. Ik wist niet eens dat je twee kolommen in 1 tabel primary key kan maken?
Je hebt in je huidige opzet een hoop redundante informatie, aangezien je geen informatie aan een stem koppelt (het is een primitieve, een integer 1 waarvan je het totaal wilt weten). Dan is zo'n aparte tabel een erg goed idee aangezien je er zo ook voor zorgt dat MySQL na een tijdje zich niet verslikt in de GROUP BY (en je hoeft iets minder rekening te houden met de juiste indices).quote:-edit2-
Hmz, een aparte score tabel incrementen is ook wel aardig idee
Ik zou eerder denken aan een soort van webservice die je kunt aanroepen met SOAP of iets dergelijks. Volgens mij bestaan er wel dergelijke vertaalwebservices.quote:Op donderdag 14 december 2006 10:45 schreef wipes66 het volgende:
Kent iemand toevallig een class die tekst kan vertalen naar duits en engels?
Google met de magische keywords: "sql countries"quote:Op donderdag 14 december 2006 12:31 schreef super-muffin het volgende:
Vraagje: kun je ook ergens een soort van voorbeeld database downloaden met bv alle landen, of een aantal namen er in?
Die heb ik namelijk nodig voor een testje, maar heb geen zin om zelf al die informatie bij elkaar te zoeken.
quote:Op donderdag 14 december 2006 11:31 schreef JeRa het volgende:
[..]
Dit kan vrij simpel omdat je telkens maar één poll opvraagt. Je koppelt de stemmen aan de vragen:
[ code verwijderd ]
Door nu te GROUP BY'en op de vragen zorg je ervoor dat je het aantal stemmen per vraag kunt tellen:
[ code verwijderd ]
COUNT() is dan dus een aggregate function die werkt op alle rijen in de tabel 'stemmen' die gekoppeld zijn aan een bepaalde vraag. Maar dit is natuurlijk niet meer relevant als je dat idee gebruikt van een aparte tabel met scores.
1 |
Ik zie geen fout in de syntax?quote:You have an error in you SQL syntax ... ~ ... syntax to use near 'GROUP BY q.Question' at line 1
1 |
Hier ga ik ook mee aan de slagquote:Een PRIMARY KEY is niets anders dan een UNIQUE INDEX met een extra tagje zodat je bij natural joins niet hoeft aan te geven hoe je tabellen koppelt. Een INDEX kun je gewoon over meerdere kolommen leggen, dat heb ik een tijd geleden in deze topicreeks redelijk uitgebreid besproken. UNIQUE zorgt ervoor dat je altijd unieke combinaties van die kolommen moet hebben. In het geval van de combinatie IP,PollID is dat dus een unieke combinatie van IP-adres en Poll-ID voor een stem
[..]
Je hebt in je huidige opzet een hoop redundante informatie, aangezien je geen informatie aan een stem koppelt (het is een primitieve, een integer 1 waarvan je het totaal wilt weten). Dan is zo'n aparte tabel een erg goed idee aangezien je er zo ook voor zorgt dat MySQL na een tijdje zich niet verslikt in de GROUP BY (en je hoeft iets minder rekening te houden met de juiste indices).
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |