Zoiets?quote:Op donderdag 1 oktober 2009 17:37 schreef ReWout het volgende:
SELECT * FROM gallery WHERE views=MAX(views)
Hoe doe ik dat? :s), ik wil dus 't element met 't grootst aantal views hebben.
1 |
Waarom niet? Dat werkt wel, en 't is een stuk minder omslachtig :)quote:oh btw ik wil niet horen dat ik dus
SELECT * FROM gallery ORDER BY views DESC LIMIT 1
ofzo :P
Ik geloof niet dat ik snap wat je zegt....quote:Op donderdag 1 oktober 2009 17:48 schreef ReWout het volgende:
[..]
Nah want die resultaat (hoeft) correnspondeert dan niet met de andere geselecteerde rijen
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 | id naam 1 Abc 2 Bcd 3 Cde 4 Def Tabel 2: id id_tabel1 uitgave_nummer versie_nummer 1 1 1 a 2 1 1 b 3 1 1 c 4 1 2 a 5 1 3 a 6 2 1 a 7 2 1 b 8 3 1 a 9 3 1 b 10 3 2 a 11 4 1 a 12 4 2 a 13 4 3 a 14 4 4 a 15 4 4 b 16 4 4 c |
Is dat een nieuw probleem of nog steeds hetzelfde probleem? In het laatste geval, hoe hadden we moeten weten dat je query over 2 tabellen gaat?quote:Op vrijdag 2 oktober 2009 07:22 schreef ReWout het volgende:
De query gaat over 2 tabellen...
[ code verwijderd ]
Nu wil ik alleen diegene selecteren uit tabel1 waarbij de uitgave_nummer nummer 't grootst is en vervolgens ook 't versie_nummer het grootste is...
Bijvoorbeeld de resultaat van me query moet zijn
id naam uitgave versie
1 Abc 3 a
2 Bcd 1 b
3 Cde 2 a
4 Def 4 c
Hetzelfde probleemquote:Op vrijdag 2 oktober 2009 07:33 schreef Light het volgende:
[..]
Is dat een nieuw probleem of nog steeds hetzelfde probleem? In het laatste geval, hoe hadden we moeten weten dat je query over 2 tabellen gaat?
Nee helaas niet want...quote:Op vrijdag 2 oktober 2009 08:59 schreef Xcalibur het volgende:
Dan zou ik lekker op uitgave en versie sorteren en het eerste record pakken
Voor je oorspronkelijke probleem blijft mijn query prima volgens mij
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 | id naam 1 Abc 2 Bcd 3 Cde 4 Def Tabel 2: id id_tabel1 uitgave_nummer versie_nummer 1 1 1 a 2 1 1 b 3 1 1 c 4 1 2 a 5 1 3 a 6 2 1 a 7 2 1 b 8 3 1 a 9 3 1 b 10 3 2 a 11 4 1 a 12 4 2 a 13 4 3 a 14 4 4 a 15 4 4 b 16 4 4 c 17 4 5 a |
1 2 3 4 5 6 7 8 9 | n.[id], n.[titel], MAX(m.[uitgave]) AS [uitgave], MAX(m.[versie]) AS [versie] FROM [tabel1] AS n LEFT JOIN [tabel2] AS m ON m.[id_tabel1] = n.[id] GROUP BY n.[id], n.[titel] |
Wanneer ik dan MAX(m.[Versie]) wegdoe (en toevoeg bij GROUP BY anders error) dan krijg je weer dubbele resultatenquote:Op donderdag 1 oktober 2009 17:48 schreef ReWout het volgende:
[..]
Nah want die resultaat (hoeft) correnspondeert dan niet met de andere geselecteerde rijen
Die query zou ikzelf ook logisch vinden, maar helaas mag je in de where clause geen MAX(), MIN(), AVG() functies uitvoerenquote:Op vrijdag 2 oktober 2009 10:47 schreef cablegunmaster het volgende:
SELECT tabel2.uitgave_nummer,tabel1.naam,tabel2.versie_nummer
FROM tabel2
LEFT JOIN tabel1 ON
tabel1.id = tabel2.id_tabel1
WHERE tabel2.uitgave_nummer = max(uitgave_nummer)
AND tabel2.versie_nummer = max(versie_nummer)
zoiets? weet niet of alle velden kloppen maar het idee is dat hij de naam pakt en het uitgave nummer en de versienummer en daarvan de laatste pakt.
dus de maximale waarde in uitgave nummer en waar ook de grootste waarde in versienummer staat![]()
en waarom zou dat niet mogenquote:Op vrijdag 2 oktober 2009 11:04 schreef ReWout het volgende:
[..]
Die query zou ikzelf ook logisch vinden, maar helaas mag je in de where clause geen MAX(), MIN(), AVG() functies uitvoeren
Al aardig op de goeie wegquote:Op vrijdag 2 oktober 2009 11:19 schreef cablegunmaster het volgende:
[..]
en waarom zou dat niet mogen?
ooh regels las het netdan moet je het met subqueries doen
![]()
SELECT tabel2.uitgave_nummer,tabel1.naam,tabel2.versie_nummer
FROM tabel2
LEFT JOIN tabel1 ON
tabel1.id = tabel2.id_tabel1
WHERE tabel2.uitgave_nummer =
(select max(uitgave_nummer)
from tabel2
where versienummer = (
select max(versie_nummer
from tabel2))
ZoietsNiet getest maar het idee moet ongv duidelijk zijn
![]()
meer info over subqueries:![]()
http://dev.mysql.com/tech-resources/articles/4.1/subqueries.html
1 2 3 4 | Def 4 b Def 4 c Def 4 d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 1 1 1 a 2 1 1 b 3 1 1 c 4 1 2 a 5 1 3 a 6 1 3 b 7 2 1 a 8 2 2 a 9 2 2 b 10 3 1 a 11 3 1 b 12 3 2 a 13 3 2 b 14 3 2 c 15 3 3 a 16 4 1 a 17 4 2 a 18 4 3 a 19 4 3 b 20 4 4 a 21 4 4 b 22 4 4 c 23 4 4 d |
1 2 | Abc 3 b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | n.[titel], m.[uitgave], m.[versie] FROM [tabel1] AS n LEFT JOIN [tabel2] AS m ON n.[id] = m.[id_tabel1] WHERE m.[versie] = ( SELECT MAX([versie]) FROM [tabel2] WHERE [uitgave] = m.[uitgave] ) AND m.[uitgave] = ( SELECT MAX([uitgave]) FROM [tabel2] WHERE [id_tabel1] = n.[id] ) |
Ja klopt toch? Een uitgave (4 bijvoorbeeld) kan meerdere versies hebben (a, b, c, d) en ik moet dus de max versie hebben van die uitgave...quote:Op vrijdag 2 oktober 2009 11:38 schreef cablegunmaster het volgende:
Lees wat je doet.
je selecteert de max versie. waar uitgave is gelijk aan uitgave... (nutteloos zinnetje)
Klopt toch ook? Er staan meerdere uitgaves in de tabel... 1, 2, 3, 4?quote:en uitgave = select maximale uitgave van tabel 2 waar id = id.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | n.[titel], MAX(m.[uitgave]), MAX(m.[versie]) FROM [tabel1] AS n LEFT JOIN [tabel2] AS m ON n.[id] = m.[id_tabel1] WHERE m.[uitgave] = ( SELECT MAX(m2.[uitgave]) FROM [tabel2] AS m2 WHERE m2.[id_tabel1] = n.[id] ) GROUP BY n.[titel], n.[id] |
1 2 3 4 5 | a 10 b 20 c 30 d 40 |
1 2 3 4 | a 10 c 20 e 30 |
Dankquote:Op zondag 4 oktober 2009 12:02 schreef GlowMouse het volgende:
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
mysql_pingquote:Op zondag 4 oktober 2009 14:40 schreef poepeneesje het volgende:
Kan iemand vertellen hoe ik met PHP kan controleren of een connectie met een DB nog bestaat.
Bedankt voor je snelle reactie.quote:
Op regel 41 staat het volgende:quote:Warning: mysql_ping(): 4 is not a valid MySQL-Link resource in /home/vhosting/../general/content.php on line 41
1 2 3 4 5 6 | if(!mysql_ping($connect)) { include("./database/mysql-database-connect.php"); } ?> |
Je moet wel eerst de connectie (je resource )al eens gelegd hebben. Anders weet de functie niet op welke connectie moet kijken of deze nog steeds open is.quote:Op zondag 4 oktober 2009 15:20 schreef poepeneesje het volgende:
[..]
Bedankt voor je snelle reactie.
Nu krijg ik de volgende melding en ik kan niet vinden waarop deze slaat:
[..]
Op regel 41 staat het volgende:
[ code verwijderd ]
Klopt, in bepaalde gevallen lijkt het alsof de connectie niet te worden opgezet en kunnen bepaalde queries niet worden uitgevoerd, om niet onnodig een connectie te willen opzetten, wil ik graag een soort van check om te kijken of de verbinding al bestaat.quote:Op zondag 4 oktober 2009 15:44 schreef ursel het volgende:
[..]
Je moet wel eerst de connectie (je resource )al eens gelegd hebben. Anders weet de functie niet op welke connectie moet kijken of deze nog steeds open is.
Je hebt gelijk. Ik heb het getest met een simpel stukje code om een bestand te uploaden naar die beveiligde map. Met dat simpele programma krijg ik geen scherm te zien.quote:Op zondag 4 oktober 2009 21:48 schreef GlowMouse het volgende:
Dat scherm komt niet door je move_uploaded_file.
clientside checks zijn te omzeilen dus moet je sowieso nog in php checkenquote:Op maandag 5 oktober 2009 16:18 schreef Tegan het volgende:
Ik heb een <FORM> waarin vier keer gekozen kan worden uit steeds tien vaste waardes (1 t/m 10).
Die vier waardes insert ik dan in mijn database. Ik moet dus vantevoren checken of die vier waardes EN uniek zijn aan elkaar (geen getal komt twee keer voor) EN of ze een van die tien vaste waardes hebben (ieder van de vier getallen ligt tussen 1 en 10).
Hoe kan ik dat het beste oplossen. In het <FORM> zelf, of tijdens het submitten dat checken en een error geven? Weet eigenlijk niet hoe ik dit het beste kan aanpakken.
1 2 3 | doe iets } |
1 2 3 | doe iets } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $n=4; $nrs = array(); for($i=1; $i<=$n; $i++) { $nrs[$i] = intval($_POST['nr' . $i]); if($nrs[$i] < 0 || $nrs[$i] > 10) { // x niet in [1,10] doorsneden met IN } } if($n != count(array_unique($nrs)) { // niet uniek } ?> |
Wat je kunt doen is een array maken met de waarde als index. Dus bijvoorbeeld als je 1,4,6 en 10 hebt dan krijg je $array[1] = "iets"; $array[4] = "iets"; $array[6] = "iets"; $array[10] = "iets";quote:Op maandag 5 oktober 2009 16:18 schreef Tegan het volgende:
Ik heb een <FORM> waarin vier keer gekozen kan worden uit steeds tien vaste waardes (1 t/m 10).
Die vier waardes insert ik dan in mijn database. Ik moet dus vantevoren checken of die vier waardes EN uniek zijn aan elkaar (geen getal komt twee keer voor) EN of ze een van die tien vaste waardes hebben (ieder van de vier getallen ligt tussen 1 en 10).
Hoe kan ik dat het beste oplossen. In het <FORM> zelf, of tijdens het submitten dat checken en een error geven? Weet eigenlijk niet hoe ik dit het beste kan aanpakken.
Tot je er na maanden achterkomt dat je bv. nr2 niet met nr4 vergeleek.quote:Op maandag 5 oktober 2009 16:45 schreef Xcalibur het volgende:
Niet de mooiste oplossing misschien, wel een hele begrijpbare
Reguliere expressies zijn overkill voor dit voorbeeld. En daarbij zijn de ereg-functies sowieso niet aan te raden. Er staat een duidelijke en niet te missen waarschuwing op die pagina.quote:Op maandag 5 oktober 2009 16:38 schreef Darkomen het volgende:
http://nl3.php.net/manual/en/function.ereg.php
Hier staan een mooi voorbeeld wat je kan aanpassen voor jouw functie.
Het zal niet het eerste script zijn dat niet volledig doorgetest wordt. Of waar ondanks goed testen toch nog fouten inzitten.quote:Op maandag 5 oktober 2009 18:15 schreef Xcalibur het volgende:
waarom zou je daar na maanden achterkomen?
Als je wat maakt moet je het wel testen natuurlijk, en dat geldt voor *iedere* oplossing, dus je opmerking ontgaat me een beetje....
Ik heb net even uitgezocht waar het aan lag.quote:Op zondag 4 oktober 2009 21:48 schreef GlowMouse het volgende:
Dat scherm komt niet door je move_uploaded_file.
1 |
1 |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |