Toon posts:

MySQL in_array()

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 30-05 20:54
Beste mensen,

Ik probeer voor elke categorie de laatst toegevoegde wallpaper uit de database te halen. Nu is dat geen probleem alleen één wallpaper kan in meerdere categorieën voorkomen. En ik wil dus niet dat op de categorie pagina dezelfde wallpapers te zien krijgt als achtergrond voor de wallpaper. Deze mogen dus maar één enkele keer toegevoegd worden.

Nu zit ik te denken hoe ik dit kan maken. In PHP zou ik de functie in_array gebruiken alleen omdat de query maar een enkele keer wordt uitgevoerd weet ik niet hoe ik dit kan oplossen.

Moet eerlijk zeggen dat ik niet weet waarop ik eigenlijk precies moet zoeken in google. Het is een soort van in_array functie in MySQL maar dan dat MySQL zelf bijhoud of deze wallpaper al eerder geselecteerd is bij een ander categorie.

MySQL:
1
2
3
4
5
6
7
8
9
SELECT WC.wallpaper_categorie_id, WC.wallpaper_categorie_titel, 
    (
        SELECT CONCAT(W.wallpaper_titel, '.', W.wallpaper_extensie) 
        FROM wallpaper W, wallpaper_koppel WK, wallpaper_subcategorie WS 
        WHERE W.wallpaper_id = WK.wallpaper_koppel_wallpaper_id AND WK.wallpaper_koppel_subcategorie_id = WS.wallpaper_subcategorie_id AND WS.wallpaper_subcategorie_categorie_id = WC.wallpaper_categorie_id 
        ORDER BY W.wallpaper_id DESC LIMIT 0,1
    ) as afbeelding
FROM wallpaper_categorie WC 
ORDER BY wallpaper_categorie_titel


Heeft iemand enig idee waarop ik moet zoeken of dat iemand mij een schopje in de juiste richting kan duwen? :)

Acties:
  • 0Henk 'm!

  • doskabouter
  • Registratie: Oktober 2004
  • Laatst online: 06-06 21:38
Misschien iets met select distinct?

Het grote voordeel van windows is dat je meer dos-boxen kan openen


Acties:
  • 0Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 02:24

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


Acties:
  • 0Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 30-05 20:54
Hmm dit begint wel ergens op te lijken maar ik krijg het nog niet aan de praat. Ik heb dit toegepast zoals hier te vinden is:
http://www.mysqlfaqs.net/...es-DISTINCT-work-in-MySQL

MySQL:
1
2
3
4
5
6
7
8
9
SELECT DISTINCT WC.wallpaper_categorie_id, WC.wallpaper_categorie_titel, 
    (
        SELECT DISTINCT CONCAT(W.wallpaper_titel, '.', W.wallpaper_extensie) 
        FROM wallpaper W, wallpaper_koppel WK, wallpaper_subcategorie WS 
        WHERE W.wallpaper_id = WK.wallpaper_koppel_wallpaper_id AND WK.wallpaper_koppel_subcategorie_id = WS.wallpaper_subcategorie_id AND WS.wallpaper_subcategorie_categorie_id = WC.wallpaper_categorie_id 
        ORDER BY W.wallpaper_id DESC LIMIT 0,1
    ) as afbeelding
FROM wallpaper_categorie WC 
ORDER BY wallpaper_categorie_titel


Ik krijg alleen precies hetzelfde resultaat dus ook dubbel. Enig idee?

Acties:
  • 0Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 05-06 10:41

NMe

Quia Ego Sic Dico.

Natuurlijk krijg je hetzelfde resultaat, want distinct gaat over je hele resultset en die is verschillend door de categorievelden die je meeneemt in je query. Zomaar blind een hint overnemen en verwachten dat het werkt is dan ook niet echt handig. Sowieso, hoe wilde je bepalen wélk record je echt op wil halen? Welke categorie? Databases zijn niet zo goed met een glazen bol. ;)

Je kan dit op drie verschillende manieren oplossen. Ofwel je verzint een criterium op basis waarvan je selecteert welke categorie je hebben wil en doet daar een query met bijvoorbeeld een group by voor, ofwel je selecteert de categorie in zijn geheel niet mee. De laatste optie zou zijn om alle dubbele afbeeldingen gewoon op te halen inclusief ID en vervolgens in PHP te filteren zodat je bij een afbeelding ook alle categorieën waarin hij valt kan laten zien.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 00:07

Jaap-Jan

Geen IPv6- ready check meer :(

Oplossing 4: Je maakt een nieuwe tabel en aan update de categorieafbeeldingen bij het toevoegen van een nieuwe wallpaper volgens een bepaalde methode (eerst gedefinieerde categorie, alfabetisch). Meer updates, maar je selects hebben geen criteria meer nodig.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 05-06 10:41

NMe

Quia Ego Sic Dico.

Stiekem is dat inderdaad de beste oplossing aangezien je daarmee geen relatief zware query voor hoeft te doen, al wordt dat pas relevant bij honderdduizenden tot miljoenen records. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee