Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[mysql] Select in query doen?

Pagina: 1
Acties:

  • Martine
  • Registratie: Mei 2002
  • Niet online
Kort geleden heb ik een nieuwe website gemaakt, hierop kunnen mensen zelf foto's toevoegen. Normaal gesproken wordt de eerste foto die ze toevoegen als thumbnail weergegeven op de welkomspagina.

Deze eerste negen foto's worden samen met het aantal reacties die erop zijn gegeven met de onderstaande query uitgelezen. Het veld 'base' is de eerste foto, op deze manier kunnen bijvoorbeeld snel alle titels van de verschillende foto's uitgelezen worden, dmv een group by 'base'.

Vandaag het geval;
Een gebruiker had al vier foto's ingezonden, deze staan al een week op de website. Nu stuurde hij vandaag nog twee foto's op. Nu wil ik dat de nieuwe foto als kleine foto wordt weergegeven op de welkomspagina.
Om zijn foto's/item op de welkomspagina weer te geven is niet zo'n probleem, ik pas het veld 'post_date' gewoon aan naar de huidige datum en tijd, en de foto staat weer vooraan.

Was mijn idee is;
Ik had het idee om er een veld in de database bij te maken met de naam 'showthisfoto', als dit veld een 1 bevat, wordt deze foto als thumbnail weergegeven. Als er dan een update komt zoals vandaag voeg ik de twee nieuwe foto's toe en zet ik het veld showthisfoto van een van de nieuwe foto's op 1.

De hamvraag;
Als het veld 'showthisfoto' een 0 bevat moet gewoon de eerste foto weergegeven worden, als het veld showthisfoto een 1 bevat, dat die foto dan wordt weergegeven, al is het dan niet de eerste foto.

code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  COUNT(reactions.id) AS comments,
  DATE_FORMAT(fotos.post_date, '%Y/%m') as filelocation,
  fotos.id, fotos.title, fotos.filename, fotos.active
FROM
  fotos
LEFT JOIN
  reactions ON fotos.id = reactions.itemid
WHERE
  fotos.base = 1 AND fotos.active = 1
GROUP BY fotos.id
ORDER BY fotos.post_date DESC LIMIT 9


Met de bovenstaande query worden momenteel de eerste negen foto's op de welkomspagina uitgelezen.

Korte toelichting;
'comments'
zijn het aantal reacties die op de foto's zijn gekomen

'filelocation'
is het map waar de foto's staan, ieder jaar en maand wordt er een nieuwe map aangemaakt waarin de foto's komen te staan die die maand zijn toevoegd.

'id', 'title' & 'filename' spreekt voorzich

'active'
als dit veld op 1 staat worden de foto's weergegeven, foto's moeten eerst door mij goedgekeurd worden voordat ze weergegeven worden.

'group by'
zit erin, anders werkt de count() niet... goed opgelost?

'post_date'
is de datum wanneer de foto toevoegd is, formaat: 0000-00-00 00:00:00

Voordat iemand of iedereen begint te schreeuwen, mochten er onduidelijkheden zijn post even een reactie, alvast bedankt!

Voor de volledigheid;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE TABLE fotos (
  id int(11) NOT NULL auto_increment,
  userid int(11) NOT NULL default '0',
  filename varchar(100) NOT NULL default '',
  originalname varchar(200) NOT NULL default '',
  post_date datetime NOT NULL default '0000-00-00 00:00:00',
  title varchar(42) NOT NULL default '',
  fotoinfo varchar(150) NOT NULL default '',
  fotoinfoalg text NOT NULL,
  filesize int(11) NOT NULL default '0',
  bigimage int(11) NOT NULL default '0',
  active int(11) NOT NULL default '0',
  parentid varchar(50) NOT NULL default '0',
  base int(11) NOT NULL default '0',
  views int(11) NOT NULL default '0',
  UNIQUE KEY id (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

[ Voor 11% gewijzigd door Martine op 13-11-2007 17:53 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Iets zegt me dat je juist moet grouperen op alles bij halve de reactions.id, maar dat is wat anders :)

Ik snap eigenlijk nog steeds het probleem niet. Je wilt de eerste 9 foto's uitlezen.

Wat wil je doen met "showthisfoto" is me nog steeds onduidelijk.

En ik mis het eigenlijke probleem.

[edit]
Na aanpassing van je post:

Als volgorde van acceptatie belangrijk is, maak je toch een kolom: acceptatiedatum er bij en sorteer je daar op, in plaats van een bit op "showthisphoto" of je past de plaatsingsdatum bij het updaten aan; standaard zet je hem dan op 1/1/1970 oid?

[ Voor 39% gewijzigd door gorgi_19 op 13-11-2007 17:57 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Martine
  • Registratie: Mei 2002
  • Niet online
Stel; gebruiker voegt drie foto's toe. Iedere foto heeft een uniek id, de andere twee bijbehorende foto's krijgen als parentid het id van de eerste foto.

Als ik later nog een foto hieraan toe wil voegen, upload ik die, zoek het juiste parentid op en tadaa; de nieuwe foto wordt er netjes onder de andere drie foto's geplaatst.

In het eerste geval kwam gewoon de eerste foto als thumbnail op de website te staan, nu wil ik dat de nieuwe (laatste toegevoegde) foto als thumbnail op de website komt. Daarom dacht ik; een veld showthisfoto erbij, als deze op 1 staat, dan wordt deze foto weergegeven in plaats van de eerste foto.

edit;
ik pas de post_date van de eerste foto aan naar de datum van nu, dan komt hij weer vooraan te staan. het probleem is echter als de mensen dan denken, heb ik al gezien, hela! er zitten twee nieuwe foto's onder, dus klik erop. Daarom wil ik de nieuwe foto weergeven.

[ Voor 17% gewijzigd door Martine op 13-11-2007 17:59 ]


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 11:32
Ik zou bij een 'album' (of hoe je een groep foto's maar noemt) een veld 'thumbnail_foto_id' (of zoiets) maken die het id bevat van de foto die als thumbnail gebruikt moet worden.

| 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


  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Waarom beschouw je het geheel niet als een foto-album, al dan niet met subalbums. In een album zitten 1 of meer foto's (bij 0 foto's wordt een album verwijderd / niet laten zien). Automatisch wordt het laatst toegevoegde foto dan laten zien als plaatje van het album, of zit ik nu in een verkeerde structuur te denken?

Je baseert nu alles als een child van een specifieke foto, terwijl het dit eigenlijk niet is.

[ Voor 13% gewijzigd door gorgi_19 op 13-11-2007 18:02 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Martine
  • Registratie: Mei 2002
  • Niet online
gorgi_19 schreef op dinsdag 13 november 2007 @ 18:02:
..... Automatisch wordt het laatst toegevoegde foto dan laten zien als plaatje van het album, of zit ik nu in een verkeerde structuur te denken?

Je baseert nu alles als een child van een specifieke foto, terwijl het dit eigenlijk niet is.
Volgens mij denk je een beetje verkeerd, ik heb een dikke tabel, hierin komen alles foto's. De eerste foto staat het veld base op 1, de andere op 0. Dat is een album, als je deze fotopagina opvraagd komen de andere foto's eronder te staan. De andere foto's hebben als parentid het id van de foto(pagina) die opgevraagd wordt.
Jaap-Jan schreef op dinsdag 13 november 2007 @ 18:02:
Ik zou bij een 'album' (of hoe je een groep foto's maar noemt) een veld 'thumbnail_foto_id' (of zoiets) maken die het id bevat van de foto die als thumbnail gebruikt moet worden.
Super opmerking, natuurlijk kan dat! Ik heb er een veld - filename_thumbnail - bji gemaakt, als deze nu niet leeg is wordt dit bestand weergegeven. Om hier nu het id in te zetten en daar de filename weer van uit te lezen wordt wel heel complex, althans dat denk ik. Of zo dirty, een query in een while :r

Nu besef ik weer als ik veeeeeel te moeilijk zit te denken, het is opgelost! 8)7 Bedankt! _/-\o_

[ Voor 36% gewijzigd door Martine op 13-11-2007 18:57 ]

Pagina: 1