[PHP/MySQL] Updaten met JOIN

Pagina: 1
Acties:
  • 290 views

Acties:
  • 0 Henk 'm!

  • HaTe
  • Registratie: Mei 2007
  • Laatst online: 09:14

HaTe

haat niet

Topicstarter
Ik heb een paar dagen geleden JOIN ontdekt (tsja, het moet ooit gebeuren he), maar snap nog niet echt alles mbt updaten en toevoegen.

Ik heb 2 tabellen:
links:
- id
- hits_in
- hits_out
- naam
- link
- added

plaatsen:
- id
- link_id

Ophalen van alle links van 1 plaats lukt wel (heeft iemand voorgedaan):
code:
1
2
3
4
5
6
7
8
SELECT
    links.*
FROM
    plaatsen
LEFT JOIN links ON
    links.id = plaatsen.link_id
WHERE
    plaatsen.id = 4


Toevoegen doe ik zo:
PHP:
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
$plaats = $_POST['plaats'];
if(mysql_query("INSERT INTO links (naam, link, added, plaats) VALUES ('$naam','$link','$datumadd','$plaats')"))
{
    $link_id = mysql_insert_id();
    $waarden = "";
    $aantal_plaatsen = count($plaats_array);
    $i = 1;
    foreach($plaats_array as $plaats)
    {
        if($i == $aantal_plaatsen)
        {
            $waarden .= "('$plaats','$link_id')";
        }else{
            $waarden .= "('$plaats','$link_id'), ";
        }
        $i++;
    }
    if(mysql_query("INSERT INTO plaatsen (plaats, link_id) VALUES $waarden"))
    {
        $bericht .= $naam." is succesvol toegevoegd aan het systeem!<br />";
    }else{
        $error .= "Er is wat fout gegaan bij het toevoegen!<br />";
    }
}else{
    $error .= "Er is wat fout gegaan bij het toevoegen!<br />";
}

Waarschijnlijk heel omslachtig en moet dat in 1x kunnen. Hoe?
Als dit wel gewoon goed is, hoe moet ik dan updaten? Ik dacht het zelfde, maar dan eerst alles uit de plaatsen tabel deleten.

WP: ME PUHZ-SW75YAA + ERST30D-VM2ED | Solar: 17x TSM-340-DE06M.08 (5780Wp ~6200kWh), Azimuth 179°, Hellingshoek: 34° | PC specs


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
HaTe schreef op woensdag 18 februari 2009 @ 19:13:
Ophalen van alle links van 1 plaats lukt wel (heeft iemand voorgedaan):
Ok, een leuke query als voorbeeld. Maar begrijp je het wel volledig? Begrijp je de join, begrijp je de 1:N relatie, etc. etc.

Want als je dat begrijpt, weet je ook waarom je in 2 tabellen moet inserten.

Naast al dit leesvoer over joins en normalisatie, heb ik ook nog een extra stukje leesvoer: sql injections. $_POST['plaats'] is user input en moet niet klakkeloos in de query.

[ Voor 18% gewijzigd door Voutloos op 18-02-2009 19:20 ]

{signature}


Acties:
  • 0 Henk 'm!

  • HaTe
  • Registratie: Mei 2007
  • Laatst online: 09:14

HaTe

haat niet

Topicstarter
Voutloos schreef op woensdag 18 februari 2009 @ 19:18:
[...]
Ok, een leuke query als voorbeeld. Maar begrijp je het wel volledig? Begrijp je de join, begrijp je de 1:N relatie, etc. etc.

Want als je dat begrijpt, weet je ook waarom je in 2 tabellen moet inserten.
Nou ja, nog niet volledig.

Ik weet wel waarom er 2 tabellen gebruikt moeten worden, daar is het hele join gebeuren toch voor. Of bedoel je dat niet?

Over SQL injections: Ben ik van op de hoogte. Weet ook wat ik tegen kan doen.
En die $_POST['plaats'] wordt al ergens anders gecontroleerd met ereg.

[ Voor 13% gewijzigd door HaTe op 18-02-2009 19:37 ]

WP: ME PUHZ-SW75YAA + ERST30D-VM2ED | Solar: 17x TSM-340-DE06M.08 (5780Wp ~6200kWh), Azimuth 179°, Hellingshoek: 34° | PC specs


Acties:
  • 0 Henk 'm!

  • Alain
  • Registratie: Oktober 2002
  • Niet online
Begin eens met uitleggen wat je nu precies wilt bereiken. Je hebt 2 tabellen, waarvan 1 alleen uit id's bestaat? Je insert plaats in links (een veld dat niet bestaat?) en daarna een link_id in plaatsen?

Voordat je met PHP begint te scripten moet je eerst zorgen dat je je database in orde hebt. Daarna kun je beslissen hoe je het beste je queries op kan bouwen.

Om op je initiele vraag terug te komen: Je kunt kiezen voor oplossingen aan de database kant, maar dat is niet altijd beter.

You don't have to be crazy to do this job, but it helps ....


Acties:
  • 0 Henk 'm!

  • HaTe
  • Registratie: Mei 2007
  • Laatst online: 09:14

HaTe

haat niet

Topicstarter
Leesvoer
Mijn topic op PHPhulp. En kijk dan even naar de reactie van Jelmer. Zo heb ik het gedaan.

WP: ME PUHZ-SW75YAA + ERST30D-VM2ED | Solar: 17x TSM-340-DE06M.08 (5780Wp ~6200kWh), Azimuth 179°, Hellingshoek: 34° | PC specs


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

(Reactie op topic start)

Nee, je kunt met SQL wel meer tabellen tegelijk opvragen, maar niet inserten.

(...wat niet helemaal waar is, omdat je met triggers op een view meer tabbellen kunt updaten, maar dan zit je in de trigger toch weer meerdere inserts uit te schrijven. )

[ Voor 5% gewijzigd door leuk_he op 18-02-2009 19:44 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 23-09 18:21

Sebazzz

3dp

Dit dus. [quote=PHP Pulp]Wel, tijd om het eens goed te leren dan :P

Eigenlijk heb je twee dingen: Links, en plekjes. Een link kan op meerdere plekjes staan, maar er kan maar één link op een plekje tegelijkertijd staan.

link -> plekje,plekje,plekje
plekje -> link.

Tada! Een echte één-op-meer relatie :) En dan heb je geen koppeltabel nodig. Ik zou zeggen: twee tabellen:

Links:
• id
• hits_in
• hits_out
• naam
• link
• added

Plaatsen:
• id
• link_id

Een lijst met alle ingevulde plaatsen kan dan als volgend:
Selecteer deze code:
SQL:
1
2
3
4
5
6
7
8
9
SELECT
   links.*,
   plaats.id as plaats_id
FROM
    plaatsen
LEFT JOIN links ON
    links.id = plaatsen.link_id
ORDER BY
    plaatsen.id

en een link op een bepaalde plaats ophalen:
Selecteer deze code:
SQL:
1
2
3
4
5
6
7
8
SELECT
    links.*
FROM
    plaatsen
LEFT JOIN links ON
    links.id = plaatsen.link_id
WHERE
    plaatsen.id = 4

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
HaTe schreef op woensdag 18 februari 2009 @ 19:13:
Ik heb een paar dagen geleden JOIN ontdekt (tsja, het moet ooit gebeuren he), maar snap nog niet echt alles mbt updaten en toevoegen.

Waarschijnlijk heel omslachtig en moet dat in 1x kunnen. Hoe?
Als dit wel gewoon goed is, hoe moet ik dan updaten? Ik dacht het zelfde, maar dan eerst alles uit de plaatsen tabel deleten.
Hoe werken Joins

Dit is allemaal wel erg basic, en mischien moet je eens een goed boek over SQL kopen.
HaTe schreef op woensdag 18 februari 2009 @ 19:39:
Leesvoer
Mijn topic op PHPhulp. En kijk dan even naar de reactie van Jelmer. Zo heb ik het gedaan.
Het is ook niet de bedoeling dat je een linkje naar een andere site plaatst, en dat de mensen hier maar de moeite moeten doen om alle informatie bij elkaar te sprokkelen. Als je een wat concretere vraag hebt dan kun je hem hier best neerzetten, maar omschrijf dan wel goed wat je al geprobeerd hebt en wat er niet wil lukken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1

Dit topic is gesloten.