hoe doe ik dit met join?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Pagina: 1 2 volgende »

Henke van der bunt

Henke van der bunt

06/04/2011 20:49:16
Quote Anchor link
Ik moet uit tabel 1 dus topics de volgende kolommen hebben
id,titel,bericht,datum,naam
where id = '" . $_GET['id'] . "'

en uit tabel 2 users
de kolommen: username,credits,activity_points,online
en dat moet dus gebeuren met de kolom topics.naam uit tabel 1.

dus topics.naam = users.id

Wie kan me hier mee helpen?

Mvg
Gewijzigd op 06/04/2011 20:49:54 door Henke van der bunt
 
PHP hulp

PHP hulp

24/11/2024 10:20:47
 
Niels K

Niels K

06/04/2011 20:51:42
Quote Anchor link
ID en naam? Dat matcht toch niet?

Je moet sowieso altijd joinen op primary key. Niet op iets wat kan veranderen.
Gewijzigd op 06/04/2011 20:52:20 door Niels K
 
Henke van der bunt

Henke van der bunt

06/04/2011 20:52:54
Quote Anchor link
hoe bedoel je dat?

Kolom naam maakt niet uit. als ik maar weet hoe ik die join uitvoer
 

06/04/2011 20:59:15
 
Arjan -

Arjan -

06/04/2011 20:59:53
Quote Anchor link
Niels bedoelt dat de kolom topics.naam waarschijnlijk een string bevat die niet valt te vergelijken met een integer veld. Een join voer je (meestal) uit op twee integer velden.
 
Niels K

Niels K

06/04/2011 21:00:10
Quote Anchor link
In je startpost staat: topics.naam = users.id

Dat betekend dus dat je naam -> id krijgt. Dat is niet iets wat je moet doen. Je moet altijd joinen op basis van primary key. (PK)

Terugkomend op jouw vraag:

Hoe wil je de naam van een topic koppelen naar een naam of id van een gebruiker?
Wat je moet doen is het volgende:

- Maak een nieuw veld aan in de tabel topic met de naam user_id
- Maak daarna een join op basis van user_id.

Dat is toch wat je wilt?
 
Henke van der bunt

Henke van der bunt

06/04/2011 21:03:15
Quote Anchor link
Ik wil graag met de kolom naam in topics.

(daar zit het user id in)

Gegevens van de user opvragen

maar ik zal die kolom wel even veranderen in ID

Dus bijv. ik wil credits opvragen van die user op basis van Userid in topics.

Mvg
 
Niels K

Niels K

06/04/2011 21:08:01
Quote Anchor link
Database topic:

- topic_id
- user_id
- titel
- naam
- bericht
- datum

Database users:

- user_id
- naam

etc..

Query wordt dan als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT t.*, u.*
FROM topic AS t
LEFT JOIN users AS u ON t.user_id = u.user_id


Let op: Wildcard wordt even gebruikt voor de test, wanneer je deze query gaat gebruiken zet je in de query wat je wilt selecteren, niet alles!
 
Henke van der bunt

Henke van der bunt

06/04/2011 21:11:43
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT t.id,t.titel,t.userid,t.bericht,t.datum u.username,u.credits,u.activity_points,u.online
FROM topic AS t
LEFT JOIN users AS u ON t.userid = u.id


Maar de gegevens die uit de tabel Topic gehaald moet worden moet met
where id = '" . $_GET['id'] . "'

En wordt met die query die ik hierboven noem de gegevens uit users gehaald door het userid van de tabel topics?

Mvg
Gewijzigd op 06/04/2011 21:12:29 door Henke van der bunt
 
Aad B

Aad B

06/04/2011 21:50:47
Quote Anchor link
Niels Kieviet op 06/04/2011 20:51:42:
Je moet sowieso altijd joinen op primary key. Niet op iets wat kan veranderen.
Onzin, je mag ook altijd op andere velden joinen. Meestal join je een primary key met een foreign key. Maar non key velden mag je ook joinen en om performance te halen is het handig om er een index op te definieren.
Gewijzigd op 06/04/2011 21:51:04 door Aad B
 
Niels K

Niels K

07/04/2011 09:42:11
Quote Anchor link
Quote:
Maar non key velden mag je ook joinen en om performance te halen is het handig om er een index op te definieren.

Kan, maar dan wel met index (unique) neem ik aan?

Quote:
Maar de gegevens die uit de tabel Topic gehaald moet worden moet met
where id = '" . $_GET['id'] . "'

Dan bouw je die where conditie er toch even in?

Let op: Gebruik te prefix (t) want anders krijg je als ik het goed heb de foutmelding: Column .. in .. is ambiguous.

Quote:
En wordt met die query die ik hierboven noem de gegevens uit users gehaald door het userid van de tabel topics?

Test het zou ik zeggen? ;)
 
Henke van der bunt

Henke van der bunt

07/04/2011 12:36:43
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$sql
= "SELECT t.id,t.titel,t.userid,t.bericht,t.datum,u.username,u.credits,u.activity_points,u.online
FROM topics WHERE t.id = '"
. $_GET['id'] . "' AS t
LEFT JOIN users AS u ON t.userid = u.id"
;
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
?>


Deze gebruik ik nu.
Nu krijg ik deze error:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in tpl/forum-replys.tpl on line 9

Toevoeging op 07/04/2011 17:51:22:

?
Gewijzigd op 07/04/2011 12:45:36 door Henke van der bunt
 
Marvin Radioo

Marvin Radioo

07/04/2011 18:08:25
Quote Anchor link
doe is foutafhandeling?
 
Henke van der bunt

Henke van der bunt

07/04/2011 18:09:30
Quote Anchor link
Er komt al vaart in.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$sql
= "SELECT t.id,t.titel,t.userid,t.bericht,t.datum,u.username,u.credits,u.activity_points,u.online
FROM topics AS t WHERE t.id = '"
. $_GET['id'] . "'
LEFT JOIN users AS u ON t.userid = u.id"
;
$res = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($res);
?>


Zo heb ik hem maar dan zegt hij

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN users AS u ON t.userid = u.id' at line 3

Waar ligt dat aan?
Gewijzigd op 07/04/2011 18:11:07 door Henke van der bunt
 
Wouter J

Wouter J

07/04/2011 18:30:11
Quote Anchor link
- or die is geen goede foutafhandeling. Gebruik goede foutafhandeling
- fetch_array is nergens voor nodig, gebruik gewoon fetch_assoc
- Gebruik een while loop voor fetch_assoc als het om meerdere gegevens gaat.
- Is dit je enige code? Dan vergeet je de mysql_connect en mysql_select_d.
 
Henke van der bunt

Henke van der bunt

07/04/2011 18:38:38
Quote Anchor link
Ik vroeg om een oplossing voor die foutmelding.

Heb je die?
 
Wouter J

Wouter J

07/04/2011 18:47:09
Quote Anchor link
De basis van een goed script is dat je alle fouten goed afhandelt. Je moet altijd zorgen dat je basis goed is, zodat je dat eventueel kan uitbreiden. En kijk eens naar mijn laatste puntje.
 
Henke van der bunt

Henke van der bunt

07/04/2011 18:54:56
Quote Anchor link
ik include global.php?

daar connect hij al?
 
Marvin Radioo

Marvin Radioo

07/04/2011 21:07:45
Quote Anchor link
Where komt altijd na join.
 
Henke van der bunt

Henke van der bunt

07/04/2011 21:09:12
Quote Anchor link
Ja dan werkt hij wel.
Super :)

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
29
30
<?php
$csql
= "SELECT r.naam,r.bericht,r.datum,u.username,u.look,u.credits,u.activity_points,u.online
FROM replys AS r
INNER JOIN users AS u ON r.naam = u.id
WHERE r.tid = '"
. $_GET['id'] . "'";
$cres = mysql_query($csql) or die(mysql_error());
$crow = mysql_fetch_assoc($cres);
    
    if (mysql_num_rows($cres) >= 1)
    {

while ($crow = mysql_fetch_array($cres))
            echo "<tr>
        <td><center><b>"
. $crow['username'] . "</b></center></td>
        <td><b>Reactie op: "
. $row['titel'] . "</b></td>
    </tr>
    <tr>
        <td><center></center></td>
        <td>"
. $crow['bericht'] . "</td>
    </tr>
    <tr>
        <td><b>Credits:</b> "
. $crow['credits'] . "<Br><b>Pixels:</b> " . $crow['activity_points'] . "<br><b>Status:</b> " . ($crow['online'] == 1 ? "Online" : "Offline") . "<br><br></td>
        <td>&nbsp;</td>
    </tr><p>"
;
        }

    else
    {
             echo "Er zijn nog geen reacties.";
    }

    
?>


Ik heb nu dit bij Reacties staan.
Maar er staan 4 reacties in de database
En hij geeft er 3 weer.

Hoe kan dat nu weer?
 
Wouter J

Wouter J

07/04/2011 21:53:27
Quote Anchor link
- Nog steeds geen goede foutafhandeling
- Center tag hoort in museum thuis, gebruik CSS hiervoor
- HTML tags zijn helemaal kleine letters
- While heeft ook {} nodig
- Let op SQL injection
- fetch_assoc en een fetch_array? Je hoeft alleen maar fetch_assoc te gebruiken
- Waarschijnlijk is die ene reactie die niet weergegeven wordt niet juist voor de JOIN of WHERE
 

Pagina: 1 2 volgende »



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.