[MySQL] Deel van varchar

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kay Kay

Kay Kay

14/02/2009 20:01:00
Quote Anchor link
Niet meer relevant, scroll naar onderen en kijk of ik het inserten goed doe, of dat het beter kan en hoe ik moet updaten



Ik ben bezig met een linkpartner script, en daarbij wil ik het zo hebben dat je meerdere plaatsen op kan geven, voor bijvoorbeeld meerdere sites.

Ik dacht dat ik wel gewoon een varchar kon maken met daarin de plaatsen, gescheiden door een komma (,). Een plaats is gewoon een digit.

Voorbeeld:
1,4,6 //dit staat in de varchar

Hier moet de link dus op plaats 1, 4 en 6 komen te staan.

Nu het probleem:
Bij het ophalen van de links zit het lastige. Ik wil bijvoorbeeld alle links die plaats 4 hebben ophalen. Ik moet dus zoeken welke rijen in de mysql tabel een plaats varchar met het getal 4 er in hebben.

Quote:
SELECT * FROM linkpartners WHERE plaats=4


Dat zou in de query komen te staan, maar omdat de plaats waarde in de varchar niet puur 4 is, maar omdat er meerdere dingen om heen staan, kan hij dat niet vinden.

Hoe zorg ik er voor dat hij het wel kan vinden? Of is er misschien een andere manier om de plaatsen op te slaan?
Gewijzigd op 01/01/1970 01:00:00 door Kay Kay
 
PHP hulp

PHP hulp

21/11/2024 21:14:14
 
- SanThe -

- SanThe -

14/02/2009 20:31:00
Quote Anchor link
Lees eens een tutorial over Normaliseren.
Jouw manier is niet de juiste manier.
 
Kay Kay

Kay Kay

14/02/2009 23:29:00
Quote Anchor link
Dankje. Ik heb het doorgelezen, maar snap niet echt wat ik er aan heb?

Dit is mijn tabelletje:
Quote:
CREATE TABLE `linkpartners` (
`id` int(4) NOT NULL auto_increment,
`hitsout` int(5) NOT NULL,
`hitsin` int(5) NOT NULL,
`naam` varchar(255) NOT NULL,
`link` text NOT NULL,
`added` datetime NOT NULL,
`plaats` varchar(50) NOT NULL default '1',
PRIMARY KEY (`id`)
)


Ik schenk eigenlijk nooit zo veel aandacht aan hoe ik het indeel..
 
Jesper Diovo

Jesper Diovo

14/02/2009 23:37:00
Quote Anchor link
Zou je wel moeten doen. Bespaart je een hoop trammelant. Je moet het allemaal zo flexibel mogelijk houden, dat je tussentijds ook nog veranderingen kunt toepassen i.p.v. je hele datamodel weer om te moeten gooien.
 
Jelmer -

Jelmer -

14/02/2009 23:42:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
Kay Kay

Kay Kay

15/02/2009 00:01:00
Quote Anchor link
Oke dankjewel!
Zo zou het kunnen, maar is het niet veel handiger om 1 tabel te gebruiken?

Ik heb nog nooit meerdere tabellen gebruikt voor een script. Met JOIN heb ik dus ook nooit gewerkt.

Zou dit dan echt de enige manier zijn om te doen wat ik wil?
 
Terence Hersbach

Terence Hersbach

15/02/2009 00:03:00
Quote Anchor link
ik denk dat het beter is om in de tabel plaatsen ipv de kolomnaam id de kolom naar position te veranderen (klinkt logischer, het is geen id).

dan kan je een unique op beide kolommen zetten zodat er nooit 2 x dezelfde rij in kan zitten (een link kan niet 2 x op 1 plekje staan lijkt mij).

@Hate: ja het is een stuk beter om zo te werken, omdat dit al je probleem oplost. Wen er maar aan dat je met meer dan 1 tabel gaat werken, ik heb wel eens gehad dat ik met 1 query ong. 8 tabellen aanspreek.
Gewijzigd op 01/01/1970 01:00:00 door Terence Hersbach
 
> Dice

> Dice

15/02/2009 05:23:00
Quote Anchor link
Wat ik zou doen,

als het aantal plekken waar de links in komen te staan bijvoorbeeld 5 is
$aantalplekken = 5;

while($i=1; $i=$aantalplekken; $i++){
$sql = "SELECT * FROM linkpartners WHERE plaats='$i'";
$result = mysql_query($sql) or die (mysql_error());

$print("<u>Kolom $i</u><br />");
while($row=mysql_fetch_array($result)){
/* hier alles ophalen wat je wilt hebben bij
$link = $row['link'];

print ("$link<br />");
*/


};
print("<br />");
};
Gewijzigd op 01/01/1970 01:00:00 door > Dice
 
Eddy E

Eddy E

15/02/2009 09:32:00
Quote Anchor link
Goede gewoonte: GEEN queries in een while!
Met je WHERE kan je ook dit doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
WHERE plaats => 1 AND plaats =< 5

Dan heb je echt maar 1 query nodig en werkt het net zo makkelijk (en sneller!!!)
 
Kay Kay

Kay Kay

15/02/2009 15:26:00
Quote Anchor link
Oke dankje voor de reacties :)

In de 2e tabel, wat moet ik daar precies inzetten? Ik heb nu 2 kolommen: id en link_id, zoals Jelmer zei.
Wat moet ik in link_id zetten dan?
Ik heb nu dus 1 tabel met de links:
| id | Naam | Link | Hits OUT | Hits IN | Toegevoegd
| 2 | Google | http://google.nl | 4 | 23 | 17-01-2009
| 1 | Testlink | http://google.com | 1 | 11 | 15-01-2009
| 3 | Tweakers.net | http://tweakers.net | 1 | 0 | 18-01-2009

Maar hoe ziet de andere er uit?
Gewijzigd op 01/01/1970 01:00:00 door Kay Kay
 
Kay Kay

Kay Kay

15/02/2009 19:44:00
Quote Anchor link
Het is gelukt :)
Het invoegen doe ik nu zo, waarbij de kolom plaats in linkpartners alleen visueel is (zodat je de plaatsen op deze manier ziet: 1,3,4)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
27
28
<?php
$plaats
= $_POST['plaats'];
                if(mysql_query("INSERT INTO linkpartners (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 linkpartners_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 />";
                }

?>


Wat vinden jullie hier van? Zoals gezegt, ik heb nog nooit met JOIN gewerkt. Kan dit makkelijker? En hoe kan ik dan makkelijk updaten? Want ik wil natuurlijk ook wel eens een linkje van een plaats weghalen
Gewijzigd op 01/01/1970 01:00:00 door Kay Kay
 
Kay Kay

Kay Kay

16/02/2009 15:35:00
Quote Anchor link
Kick
 
Kay Kay

Kay Kay

16/02/2009 18:45:00
Quote Anchor link
Kick 2 (sorry)

Maar hoe kan ik updaten met die JOIN? Met mijn huidige kennis zal ik het zelfde doen zoals ik het nu toevoeg, maar dat ik eerst alle waarden verwijder.
 
Kay Kay

Kay Kay

17/02/2009 13:26:00
Quote Anchor link
Kick 3 ..
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.