[Dilemma]Query binnen een While loop, of foute DB

Pagina: 1
Acties:

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 25-08 23:43

RRX

@life-

Topicstarter
ik heb het volgende probleem:

ik haal met een querie reacties uit de database, met alle informatie daarbij.

nu heb ik 2 fields in de tabel reactie voor als mensen hun reactie gewijzigd hebben:
code:
1
| reactie_gewijzigd_date | reactie_gewijzigd_door |

Standaard staat "reactie_gewijzigd_date" (timestamp) op 00000000000000 en als hij dan gewijzigd is, staat ie op de datum waarop hij gewijzigd is. in "reactie_gewijzigd_door" staat het ID van de gebruiker die de post gewijzigd heeft. (staat standaard op 0). Nou controleer ik binnen het while-loopje om de reacties op te halen of "reactie_gewijzigd_door" != "0" alleen hoe meer mensen hun post editen, hoe meer queries ik nodig heb om het goed weer te kunnen geven. dat is dus niet erg goed voor de performance.

een andere manier waarop het wel binnen de zelfde query kan, is (de enigste manier die ik kan bedenken) om letterlijk de username in "reactie_gewijzigd_door" te zetten, maar is de database niet meer 100% relationeel en dat wil ik niet.

wie heeft een oplossing :?

mijn T.net systeemspecspagina


Verwijderd

Ik snap niet precies wat je bedoelt. Mijns inziens heb je namelijk niet meet queries nodig naarmate meer reakties worden gewijzigd, maar misschien begrijp ik je verkeerd.

1) Wat is je datastructuur?
2) Wat wil je ophalen?
3) Wat is de huidige query die je gebruikt?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 19:11

Crazy D

I think we should take a look.

Je kan toch een (right?) join doen op gewijzigd-door en de user-tabel?

Exact expert nodig?


  • RRX
  • Registratie: Mei 2000
  • Laatst online: 25-08 23:43

RRX

@life-

Topicstarter
ik heb al join om de naam aan de gebruikerstabel te koppelen, maar de post hoeft niet door dezelfde gebruiker gewijzigd te zijn, dit kan bijv. ook een admin gedaan hebben.

zo ziet het er nu uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
if($get_reactie = @mysql_query_count("SELECT `gebruiker_website`,`gebruiker_rang_ID`,date_format(`reactie_gewijzigd`,\"%d-%m-%y %H:%i\") AS `reactie_gewijzigd_dateformat`,`reactie_gewijzigd_door`,`reactie_timestamp`,`gebruiker_subtitle`,`gebruiker_signature`,`reactie_inhoud`,`reactie_ID`,`gebruiker_naam`,`gebruiker_ID`,`gebruiker_icon`,`rang_ID`,`rang_naam`,date_format(`reactie_timestamp`,\"%H:%i\") AS `reactie_timestamp_tijd` ,date_format(`reactie_timestamp`,\"%w\") AS `reactie_timestamp_week`,date_format(`reactie_timestamp`,\"%m\") AS `reactie_timestamp_maand`, date_format(`reactie_timestamp`,\"%d\") AS `reactie_timestamp_dag`, date_format(`reactie_timestamp`,\"%Y\") AS `reactie_timestamp_jaar` FROM `reactie`,`gebruiker`,`rang` WHERE `rang_ID` = `gebruiker_rang_ID` AND `reactie_topic_ID` = '$topic' AND `reactie_gebruiker_ID` = `gebruiker_ID` ORDER BY `reactie_ID` $limit"))
{
    while($reactie = @mysql_fetch_object($get_reactie))
    {
        if($reactie->reactie_gewijzigd_door != "0")
        {
            $get_modifier = @mysql_query_count("SELECT `gebruiker_naam` AS `name` FROM `gebruiker`,`reactie` WHERE `reactie_gewijzigd_door` = `gebruiker_ID` AND `reactie_ID` = '$reactie->reactie_ID'");
            $modifier = @mysql_fetch_object($get_modifier);
            $modified="Gewijzigd: $reactie->reactie_gewijzigd_dateformat door $modifier->name";
        }
        else
        {
            $modified="";
        }

[..]
?>

mijn T.net systeemspecspagina


Verwijderd

Op dinsdag 05 februari 2002 01:25 schreef RRX het volgende:
ik heb al join om de naam aan de gebruikerstabel te koppelen, maar de post hoeft niet door dezelfde gebruiker gewijzigd te zijn, dit kan bijv. ook een admin gedaan hebben.
2 joins, van verschillende velden naar dezelfde tabel misschien? ;)
code:
1
2
3
4
SELECT R.ID, R.Tekst, U1.Naam, U2.Naam, ...
FROM (R Reactie LEFT JOIN User U1 ON R.VanUser = U1.ID)
     LEFT JOIN User U2 ON R.GewijzigdDoorUser = U2.ID
...

Enjoy :)

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 25-08 23:43

RRX

@life-

Topicstarter
Op dinsdag 05 februari 2002 01:33 schreef MrX het volgende:

[..]
code:
1
U1.Naam, U2.Naam

ik heb maar 1 "U" tabel hoor?

of begrijp ik nu iets verkeerd?

mijn T.net systeemspecspagina


Verwijderd

Op dinsdag 05 februari 2002 01:38 schreef RRX het volgende:

[..]
code:
1
U1.Naam, U2.Naam

ik heb maar 1 "U" tabel hoor?

of begrijp ik nu iets verkeerd?
Uhm ... jah. ;)

Je hebt maar in User tabel, maar je kunt het in een query op 2 (of zelfs meer) plaatsen gebruiken. Je doet dat door dezelfde tabel verschillende aliassen te geven.

Je geeft een tabel een alias door direct achter de naam van de tabel de unieke alias te zetten, en vervolgens daarna te verwijzen i.p.v. naar de tabelnaam.

Als je 1 tabel meerdere aliassen geeft binnen een query lijkt het net alsof je 2 'kopieen' van je tabel maakt met verschillende namen.

HTH :)

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 25-08 23:43

RRX

@life-

Topicstarter
Op dinsdag 05 februari 2002 01:47 schreef MrX het volgende:

[..]

Uhm ... jah. ;)

Je hebt maar in User tabel, maar je kunt het in een query op 2 (of zelfs meer) plaatsen gebruiken. Je doet dat door dezelfde tabel verschillende aliassen te geven.

Je geeft een tabel een alias door direct achter de naam van de tabel de unieke alias te zetten, en vervolgens daarna te verwijzen i.p.v. naar de tabelnaam.

Als je 1 tabel meerdere aliassen geeft binnen een query lijkt het net alsof je 2 'kopieen' van je tabel maakt met verschillende namen.

HTH :)
cool, dat wist ik nog niet, gelijk even proberen ;)

mijn T.net systeemspecspagina

Pagina: 1