Toon posts:

[SQL / PHP] Uniek id meteen tijdens invoegen

Pagina: 1
Acties:
  • 57 views sinds 30-01-2008

Verwijderd

Topicstarter
Hoi.,

Ik weet het, het is een vage titel, maar heb ook een vaag probleem :).
Ik heb de volgende tabel (messages):
ID | TITEL | BERICHT | REPLYTO
Ik wil dat als ik deze query heb:
INSERT INTO messages (titel,bericht) VALUES ('$titel','$bericht')
Ik wil graag het veld replyto dat daar het GEINSERTE ID in komt te staan. Ik kan wel eerst mysql_insert_id(); aanvragen en dan een update uitvoeren maar ik vroeg me af of het niet in 1 keer kon.

Voor de duidelijkheid. Bij een topic moet ie het eigen replyto hebben. Bij een reactie moet ie het replyto van de topic hebben maar dat snap ik wel :).

Is dit dus mogelijk?
Iets als dit :
INSERT INTO messages (titel,bericht,replyto) VALUES ('$titel','$bericht',messages.id)
Alvast bedankt.

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Kan je met mysql niet the column definition van replyto op autoincrement zetten?

Verwijderd

Topicstarter
Op dinsdag 23 juli 2002 16:48 schreef stekkel het volgende:
Kan je met mysql niet the column definition van replyto op autoincrement zetten?
kan wel maar ik zei al.. ik wil bij reacties REPLYTO = '$TOPIC_ID' en bij een topic wil ik TOPIC = '$EIGEN_AANGEMAAKTE_TOPIC_ID'

Verwijderd

Topicstarter
aah wacht.. van mysql.com:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name
SET col_name=expression, col_name=expression, ...
dus ik moet gewoon:
INSERT INTO messages (titel,bericht) VALUES ('$titel','$bericht') SET replyto = id
? ?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 01-09 21:13

TeeDee

CQB 241

dus als ik het goed begrijp:

Je wilt de laatste ID van het topic uitlezen en die weer meegeven?

Kan je dan niet iets van een stored procedure gebruiken?
Was iets van @@Identity toch?

Anders misschien: select max(id) from database en die dan weer doorgeven?

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
Op dinsdag 23 juli 2002 16:53 schreef TeeDee het volgende:
dus als ik het goed begrijp:

Je wilt de laatste ID van het topic uitlezen en die weer meegeven?

Kan je dan niet iets van een stored procedure gebruiken?
Was iets van @@Identity toch?

Anders misschien: select max(id) from database en die dan weer doorgeven?
nee dat wil ik dus niet .. ik wil het aangewezen ID dat al is gezet meteen weer in een andere kolom invoegen

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 01-09 21:13

TeeDee

CQB 241

dat kan je toch "workarounden" met een 2e select?

/edit: dat wil je dus juist niet ;)

Als het nog niet zo is, begrijp ik je idd echt niet ;)

Heart..pumps blood.Has nothing to do with emotion! Bored


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Op dinsdag 23 juli 2002 16:54 schreef Stoel het volgende:

[..]

nee dat wil ik dus niet .. ik wil het aangewezen ID dat al is gezet meteen weer in een andere kolom invoegen
Snap het nut niet daarvan. Kan je niet beter in php
if (!$reply_id) {
$reply_id = $id;
}

doen?

Verwijderd

Als je op de reply knop van het topic klikt moet je het id van dat topic meegeven. Bij het formulier van de reply maak je dan een hidden veld met name = 'topic_id' en als value de variabele waarin je het topic id meegeeft, bijvoorbeeld $id. Als je dan het formulier submit kan je in je query achter bericht en titel gewoon die kolom invoeren.

Hoop dat ik het goed begrepen heb want ik snap van de replys maar weinig eigenlijk :?

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 14:19
Xan:
Hoop dat ik het goed begrepen heb want ik snap van de replys maar weinig eigenlijk :?
Je begrijpt er niks van ;)

De topicstarter wil dat het uniek gegenereerde id wat bij het INSERTEN in de tabel wordt gezet, GELIJK ook in een ander veld wordt gezet, zonder meerdere queries te gebruiken.

Dat nummer is vantevoren niet bekend dus wat jij zegt kan niet :).

Verwijderd

Dan snap ik er inderdaad niks van. Het gaat toch om een systeem dat je bij de reactie het id van de topic krijgt? Waar dient dat andere id dan voor en waar komt het vandaan? Dus wat bij de kolom id komt moet ook in die laatste? :?

Verwijderd

Topicstarter
Op dinsdag 23 juli 2002 18:19 schreef Xan het volgende:
Dan snap ik er inderdaad niks van. Het gaat toch om een systeem dat je bij de reactie het id van de topic krijgt? Waar dient dat andere id dan voor en waar komt het vandaan? Dus wat bij de kolom id komt moet ook in die laatste? :?
lees de draad voordat je blaat

Verwijderd

Topicstarter
Op dinsdag 23 juli 2002 18:12 schreef ddc het volgende:

[..]

Je begrijpt er niks van ;)

De topicstarter wil dat het uniek gegenereerde id wat bij het INSERTEN in de tabel wordt gezet, GELIJK ook in een ander veld wordt gezet, zonder meerdere queries te gebruiken.

Dat nummer is vantevoren niet bekend dus wat jij zegt kan niet :).
thanks jij begrijpt het .. enig idee hoe het moet ? ?

Verwijderd

Topicstarter
Op dinsdag 23 juli 2002 17:36 schreef stekkel het volgende:

[..]

Snap het nut niet daarvan. Kan je niet beter in php
if (!$reply_id) {
$reply_id = $id;
}

doen?
wat heeft dat nu met mijn vraag te maken . .nogmaals LEES DE DRAAD VOORDAT JE BLAAT :7

word wel ff pissed off van die mensen die snel slim willen doen zonder de draad te lezen

Verwijderd

Hou je eens rustig, lees zelf dan ook! Ik heb het gelezen maar ik snapte het probleem gewoon niet. Sorry hoor |:(

Verwijderd

Topicstarter
Op dinsdag 23 juli 2002 18:50 schreef Xan het volgende:
Hou je eens rustig, lees zelf dan ook! Ik heb het gelezen maar ik snapte het probleem gewoon niet. Sorry hoor |:(
oke O-)

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

ik snap niet precies wat je wilt (het is nog vroeg zullen we maar zeggen ;) ) Maar...ik er komen wel twee dingen in me op als ik dit lees. Nl.:

LAST_INSERT_ID()([url="http://www.mysql.com/doc/G/e/Getting_unique_ID.html"]http://www.mysql.com/doc/G/e/Getting_unique_ID.html[/url])

En INSERT ... SELECT ([url="http://www.mysql.com/doc/I/N/INSERT_SELECT.html"]http://www.mysql.com/doc/I/N/INSERT_SELECT.html[/url])

Heb je daar misschien iets aan?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Wat is het nut ervan om de id en replyto gelijk te trekken :?

Verwijderd

Topicstarter
Op dinsdag 23 juli 2002 18:57 schreef Zoijar het volgende:
ik snap niet precies wat je wilt (het is nog vroeg zullen we maar zeggen ;) ) Maar...ik er komen wel twee dingen in me op als ik dit lees. Nl.:

LAST_INSERT_ID()([url="http://www.mysql.com/doc/G/e/Getting_unique_ID.html"]http://www.mysql.com/doc/G/e/Getting_unique_ID.html[/url])

En INSERT ... SELECT ([url="http://www.mysql.com/doc/I/N/INSERT_SELECT.html"]http://www.mysql.com/doc/I/N/INSERT_SELECT.html[/url])


Heb je daar misschien iets aan?
die werkt volgens mij wel goed jah . .thanks..

Verwijderd

Topicstarter
Op dinsdag 23 juli 2002 19:04 schreef ACM het volgende:
Wat is het nut ervan om de id en replyto gelijk te trekken :?
omdat ik dan doe SELECT * FROM messages WHERE replyto = '$TOPICID' ORDER BY id,datum

dat is de gedachte. .

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 23 juli 2002 19:06 schreef Stoel het volgende:
die werkt volgens mij wel goed jah . .thanks..
Ik gok dat die niet goed werkt?
En anders is dat een vieze manier.
Op dinsdag 23 juli 2002 19:07 schreef Stoel het volgende:
omdat ik dan doe SELECT * FROM messages WHERE replyto = '$TOPICID' ORDER BY id,datum
Heel leuk, maar is dat perse nodig? :)
Kan ook zo:
select * from messages where id = topicid OR replyto = topicid.

imho ietsepietsie netter/makkelijker :)

Verwijderd

... en dan zet je je replyto op 0, zodat je ook je topics netjes kunt selecteren.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 23 juli 2002 19:11 schreef RobinVR het volgende:
... en dan zet je je replyto op 0, zodat je ook je topics netjes kunt selecteren.
We lijken wel een team :+

Magoed, het is daardoor dus ook nog ietsje flexibeler

Verwijderd

Topicstarter
Op dinsdag 23 juli 2002 19:11 schreef RobinVR het volgende:
... en dan zet je je replyto op 0, zodat je ook je topics netjes kunt selecteren.
dat kan wel kloppen .. (dat klopt ook niet eens aan gedacht, lekker dom :D) maar dan moet ik twee queryes maken . .1 keer om topic te vragen en de rest voor reactie while loop.. toch ?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 23 juli 2002 19:17 schreef Stoel het volgende:
toch ?
Nee.
Als je een compleet topic wilt tonen doe je mijn query.
Als je een overzicht van de topics wilt tonen doe je ipv mijn query een select met replyto = 0.

In beide gevallen 1 query.

Verwijderd

Topicstarter
Op dinsdag 23 juli 2002 19:19 schreef ACM het volgende:

[..]

Nee.
Als je een compleet topic wilt tonen doe je mijn query.
Als je een overzicht van de topics wilt tonen doe je ipv mijn query een select met replyto = 0.

In beide gevallen 1 query.
ik heb het over showtopic .. (compleet topic is dus ook met reacties..

Verwijderd

Dient replyto nou om het id op te slaan van het bijbehorende topic? En moet het 0 zijn als het zelf een topic is?

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 14:19
Xan:
Dient replyto nou om het id op te slaan van het bijbehorende topic?
Indien het een reactie is, ja.
En moet het 0 zijn als het zelf een topic is?
Nee, dan moet het z'n eigen id zijn.

Verwijderd

Ok, dan snap ik het nu :). Hield alleen rekening met het eerste deel, ik ben namelijk ook met een klein forum bezig en ik heb aparte tabellen voor topics en reacties. Dan is het toch wat makkelijker lijkt me?

  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Op dinsdag 23 juli 2002 18:49 schreef Stoel het volgende:
word wel ff pissed off van die mensen die snel slim willen doen zonder de draad te lezen
Doe ff normaal zeg. Dat jij een erg afwijkende (kuch kuch) DB-opzet hebt is ook niet de schuld van anderen. Heb je liever dat je topics genegeerd worden?

Je wilt eigenlijk een 2e auto_increment kolom. Dit zul je toch echt moeten doen met een 2e query. Zie het probleem niet zo, want dat kost echt nauwelijks tijd.

https://niels.nu


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Op dinsdag 23 juli 2002 20:18 schreef Xan het volgende:
Ok, dan snap ik het nu :). Hield alleen rekening met het eerste deel, ik ben namelijk ook met een klein forum bezig en ik heb aparte tabellen voor topics en reacties. Dan is het toch wat makkelijker lijkt me?
Dat niet alleen, zo hoort het ook. Dit soort problemen krijg je als geen edammer hebt gegeten van normalisatie.

https://niels.nu


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Op dinsdag 23 juli 2002 18:49 schreef Stoel het volgende:

[..]

wat heeft dat nu met mijn vraag te maken . .nogmaals LEES DE DRAAD VOORDAT JE BLAAT :7

word wel ff pissed off van die mensen die snel slim willen doen zonder de draad te lezen
:? :?

Ahum, ik heb de draad gelezen en vindt dat jij gewoon een domme programmeur bent. Waarom in godsnaam een veld in de database met dezelfde data.

Een wat slimmere programmeur zou een boolean gebruiken om aan te geven dat het een reply betreft. En de ID, die heb je al.

De reden dat jij "niet gewenste" reacties krijgt omdat
a] de probleem omschrijving vaag is
b] mensen een andere oplossing voorstellen die beter is.

Maar ja, luister maar niet want jij houdt niet van slimme mensen. Je wordt er zelf pissed of van.

:r :r :r

  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
Op dinsdag 23 juli 2002 19:19 schreef ACM het volgende:

[..]

Nee.
Als je een compleet topic wilt tonen doe je mijn query.
Als je een overzicht van de topics wilt tonen doe je ipv mijn query een select met replyto = 0.

In beide gevallen 1 query.
Afbeeldingslocatie: http://www.motor-forum.nl/forum/images/smilies/stupid.gif

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Sorry, probeer alweer slim te zijn.

Als je het reply_to veld echt nuttig wilt gebruiken dan moet het reply_to field de reply_id bevatten van het bericht waar je op replied en NIET zoals jij wou de id van het nieuw te inserten bericht. De reply_id is dus VAN TE VOREN bekend.

Wanneer je dat doet kan kan je de thread reproduceren omdat je de parent-child relations via reply_to hebt vastgelegd.

Door je fetched data door een of andere parser functie te halen die alles weer netjes in een tree stopt kan je leuk met indents werken.
dus:
code:
1
2
3
4
5
6
bericht1
   Re: bericht1
   Re: bericht1
     Re bericht1
   Re vericht1
bericht2

Verder zou ik ook date, from, etc columns toevoegen.

Door nu ook nog ook nog de thread_id to te voegen (is id van bericht1 is het mogelijk om met een select statement in een keer een hele thread op te halen.

Unthreaded view is dan gewoon select * from message where reply_id=0

Een specifieke Thread zien is dan:
select * from message where thread_id=$thread

Wanneer je alles ophaald is het ook mogelijk om alle berichten in thread view (expanded) te zien zonder dat je individuele fetches nodig bent om een specifieke thread op te halen.

Piece of cake zou ik zeggen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 24 juli 2002 00:02 schreef CK het volgende:
[url="http://www.motor-forum.nl/forum/images/smilies/stupid.gif"][afbeelding][/url]
Wat wil je daar nou weer mee zeggen?

Verwijderd

Ja das niet liev. Een beetje ACM beledigen. ACM roeleert gewoon keihard de pan uit :7

Verwijderd

Topicstarter
Op dinsdag 23 juli 2002 20:31 schreef Hydra het volgende:

[..]

Dat niet alleen, zo hoort het ook. Dit soort problemen krijg je als geen edammer hebt gegeten van normalisatie.
hoezo zo hoord het ook . .hier op got gebruiken ze dat niet hoor. . zo PUH! .. want als je wil quoten van een topic en van een reactie gaat dat in 1 tabel veel makkelijker!!!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Het valt me hier sowieso op dat ongeveer 80% van de sql vragen voort komen uit database schemas die niet in 3nf of hoger staan, of schemas die redundante info bevatten. (80% van de statistieken wordt ook gewoon verzonnen :P )

Kan niet iemand daar is een kort artikeltje over schrijven? En dat in de faq dan, zou een hoop problemen schelen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 24 juli 2002 09:55 schreef Stoel het volgende:
hoezo zo hoord het ook . .hier op got gebruiken ze dat niet hoor. . zo PUH! .. want als je wil quoten van een topic en van een reactie gaat dat in 1 tabel veel makkelijker!!!
Wat gebeurt in topix niet :?

Er wordt geen reply_to bijgehouden, dat klopt.
Maar het berichtje wat bij een topic zit wordt in dezelfde tabel opgeslagen als de andere berichten daaronder...

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

dit gaat nergens meer over en de mogelijke oplossing staat erin

Doet iets met Cloud (MS/IBM)

Pagina: 1

Dit topic is gesloten.