SQL join

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Nigel

Nigel

13/06/2009 23:32:00
Quote Anchor link
Kan je met JOIN ook uit 3 tabellen iets selecteren.

Ik zie wel dat je uit 2 tabellen iets tegelijk kan selecteren.

Maar is het mogelijk om uit 3 tabellen tegelijk te selecteren?

Edit:
Ik geloof dat ik een perfect voorbeeld heb gevonden.http://www.phphulp.nl/php/tutorials/3/205/378/
Gewijzigd op 01/01/1970 01:00:00 door Nigel
 
PHP hulp

PHP hulp

06/11/2024 00:46:47
 
Noppes

Noppes

13/06/2009 23:55:00
Quote Anchor link
"Kan je met JOIN ook uit 3 tabellen iets selecteren."
Ja waarom zal dat niet kunnen

http://www.phphulp.nl/php/tutorials/3/205/378/
wel dat valt onder `pruts` tutorials

Denk dat je hier beter je weg zult vinden:
http://www.w3schools.com/SQL/sql_join.asp
 
Nigel

Nigel

14/06/2009 00:15:00
Quote Anchor link
Achja ik kreeg in iedergeval resultaat.
nu selecteert hij alleen maar uit de tabel projecten.
en echo alleen de waardes uit tabel projecten 4x hetzelfde.

Ook heb ik het idee dat ik de verkeer functie gebruik(mysql_fetch_array)(assoc) geeft zelfde resultaat.

Als ik uit maar 1 tabel selecteer en meerdere dingen wil echo'en gebruik ik
mysql_fetch_assoc
--
Nog even duidelijk maken wat mijn bedoeling is.
op het moment selecteren uit 2 tabellen. scripts en projecten
allebij hebben ze een veldnaam "date"
Het is de bedoeling dat ik al die waardes op een rijtje krijg

Welke funtie moet ik gebruiken.
Of wat doe ik fout?
--
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
$sql
= "SELECT t1.date, t2.date FROM ";
$sql .= "scripts AS t1, projecten AS t2 ";
$res = mysql_query($sql);
while ($row = mysql_fetch_array($res)){

echo"" . $row['date'] . "<br />";
echo"" . $row['id'] . "<br />";
}

?>
 
Noppes

Noppes

14/06/2009 00:31:00
Quote Anchor link
Je vergeet te joinen

Het je moet geen veldnamen gebruiken welke gereserveerd zijn dan wel een type definitie zijn dan wel lijken op een sql-functie

En flikker nu toch eens mysql_fetch_array in de prullenbak en gebruik altijd
mysql_fetch_assoc!!

zie het verschil:
http://www.php.net/mysql_fetch_array
http://www.php.net/mysql_fetch_assoc
 
Jelmer -

Jelmer -

14/06/2009 01:04:00
Quote Anchor link
Hoe zijn de tabellen scripts en projecten aan elkaar gerelateerd? Wat is de relatie tussen beiden? Heeft één project meerdere scripts, of andersom?

Als je gewoon een lijstje met de meest recente projecten en scripts door elkaar wilt hebben, is UNION wat je zoekt denk ik ;)
 
Tim Kampherbeek

Tim Kampherbeek

14/06/2009 02:22:00
Quote Anchor link
Om meer dan 2 tabellen te selecteren gebruik ik zelf altijd LEFTJOIN .
 

14/06/2009 10:09:00
Quote Anchor link
Tim Kampherbeek schreef op 14.06.2009 02:22:
Om meer dan 2 tabellen te selecteren gebruik ik zelf altijd LEFTJOIN .

Volgens mij moet Nigel gewoon doen wat Jelmer zegt.
En ik hoop dat je niet echt altijd een LEFT JOIN gebruikt, aangezien dat voor hele rare, foute of gevaarlijke resultaten kan zorgen.
 
Joren de Wit

Joren de Wit

14/06/2009 11:26:00
Quote Anchor link
Jelmer schreef op 14.06.2009 01:04:
Als je gewoon een lijstje met de meest recente projecten en scripts door elkaar wilt hebben, is UNION wat je zoekt denk ik ;)
Houd er wel rekening mee dat in een UNION de (datatypen van de) velden in beide SELECT clausules overeen moeten komen. Zoiets gaat niet werken als je uit twee echt verschillende tabellen wilt selecteren.

Tim Kampherbeek schreef op 14.06.2009 02:22:
Om meer dan 2 tabellen te selecteren gebruik ik zelf altijd LEFTJOIN .
Ik betwijfel dat jij weet wat een LEFT JOIN nu precies doet. Misschien dat het handig is om dat eerst eens uit te zoeken voordat je dit soort onnozele antwoorden geeft?
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Klaasjan Boven

Klaasjan Boven

14/06/2009 11:44:00
Quote Anchor link
@Blanche niet met je eens,

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
select gemaakt  as blaat  from berichten
union
select link as blaar from linken


werkt prima!!
Edit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
select gemaakt  from berichten
union
select link  from linken


werkt zelfs ook wel.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
gemaakt
2009-06-02 23:38:23
2009-06-02 23:45:08
2009-06-02 23:45:27
2009-06-02 23:45:55
mijngegevens
mijnrooster


Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Hipska BE

Hipska BE

14/06/2009 12:00:00
Quote Anchor link
OMG! Wat is er met uw database gebeurd klaasjan? :-O
Welke is dat? MySQL of een andere?

En Tim verdorie stop eens met zo uit je nek te lullen!
 
Klaasjan Boven

Klaasjan Boven

14/06/2009 12:03:00
Quote Anchor link
Hipska schreef op 14.06.2009 12:00:
OMG! Wat is er met uw database gebeurd klaasjan? :-O
Welke is dat? MySQL of een andere?

En Tim verdorie stop eens met zo uit je nek te lullen!


Wat bedoel je Hipska
 
Joren de Wit

Joren de Wit

14/06/2009 12:16:00
Quote Anchor link
Ik was in mijn post misschien niet helemaal duidelijk. Het zijn de datatypen die voor een UNION in ieder geval overeen moeten komen wil de query slagen. Maar als je er ook nog zinnige resultaten uit wilt halen, zul je er wel voor moeten zorgen dat de gegevens in beide velden van dezelfde strekking zijn.

Zoals je al ziet aan het resultaat dat je het gegeven voorbeeld krijgt, slaat de betekenis nergens op. UNION is niet bedoeld om verschillende soorten gegevens in een resultaatset te proppen, het moet wel een zinnige betekenis hebben.

Tenslotte is er nog een laatste nadeel aan het gebruik van UNION. Als je het hebt over projecten en scripts, dan is het best mogelijk dat er gegevens zijn die bijvoorbeeld wel voor een project bestaan maar niet voor een script. In een query met UNION is het al niet mogelijk om deze gegevens op te halen.

ps. Even een voorbeeldje van een UNION die onzin oplevert:
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
mysql> SELECT postcode AS onzin FROM postcodes UNION SELECT ip FROM ipadres;
+-----------------+
| onzin           |
+-----------------+
| 3500            |
| 3511            |
| 3495            |
| 3502            |
| 3493            |
| 3506            |
| 127.0.0.1       |
| 123.123.123.123 |
| 123.456.123.456 |
| 123.456.456.123 |
| 1.1.1.1         |
+-----------------+
11 rows in set (0.00 sec)
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Nigel

Nigel

14/06/2009 12:23:00
Quote Anchor link
Oke misschien ook handig om te weten.

Ik ben voor mijn site een nieuws module aan het maken.
3 tabellen. projecten,scripts, en nieuws(die liet ik nog even achterwegen)

Nu is het de bedoeling dat ik de nieuwste 5 ga weergeven uit die 3 tabellen.

Nu hou ik me eerst beperkt tot 2 tabellen, aangezien het voor mij nieuw is,Lijkt dit al moeilijk genoeg.

Nu ga ik eerst even de rest van de posts doornemen.

@noppes. mysql_fetch_array gebruik ik verder ook niet.
Dat stond toevallig in die ene tut die jij de deur wees ;)

@blanche Ik hoef eigenlijk ook maar 2 velden uit de database te hebben.
Date (de datum van de plaatsing)
en id (nodig om door te verwijzen)
nu zit ik te denken aan een derde. want ik wil graag dat scripts word doorverwezen naar een andere pagina da een project.
Maar dat even achterwegen gelaten
Gewijzigd op 01/01/1970 01:00:00 door Nigel
 
Jelmer -

Jelmer -

14/06/2009 12:28:00
Quote Anchor link
Mocht het je niet lukken om een werkende query met UNION te schrijven (want UNION is toch wat je zoekt, want ik had gelijk, muhahahaha!) dan is het handig om ook even de structuur en datatypes van die drie tabellen te posten. Even de 3 CREATE queries die je krijgt wanneer je de database exporteert uit phpMyAdmin is prima.

edit:
Een manier om het verschil te zien tussen projecten en scripts is iets a la
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
(SELECT
    'project' as id_type,
    projecten.id as id,
    projecten.naam as naam,
    projecten.aangemaakt_op as gemaakt_op
FROM
    projecten)
UNION
(SELECT
    'nieuws' as id_type,
    nieuws.id as id,
    nieuws.titel as naam,
    nieuws.geschreven_op as gemaakt_op
FROM
    nieuws)
ORDER BY
    gemaakt_op DESC


edit (vergeten :P) je kan nu in je PHP script afhankelijk wat er in $row['id_type'] zit naar de goeie pagina op basis van $row['id'] verwijzen.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Nigel

Nigel

14/06/2009 12:35:00
Quote Anchor link
oke de 3 tabellen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
CREATE TABLE `nieuws` (
  `id` int(11) NOT NULL auto_increment,
  `content` longtext collate utf8_unicode_ci NOT NULL,
  `naam` varchar(99) collate utf8_unicode_ci NOT NULL,
  `date` varchar(32) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
CREATE TABLE `scripts` (
  `id` int(11) NOT NULL auto_increment,
  `prijs` decimal(10,2) NOT NULL,
  `naam` varchar(99) collate utf8_unicode_ci NOT NULL,
  `omschrijving` longtext collate utf8_unicode_ci NOT NULL,
  `betaalurl` varchar(99) collate utf8_unicode_ci NOT NULL,
  `versie` varchar(32) collate utf8_unicode_ci NOT NULL,
  `date` varchar(32) collate utf8_unicode_ci NOT NULL default '00/00/0000 00:00:00',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
CREATE TABLE `projecten` (
  `id` int(11) NOT NULL auto_increment,
  `img` varchar(99) collate utf8_unicode_ci NOT NULL,
  `naam` varchar(99) collate utf8_unicode_ci NOT NULL,
  `omschrijving` varchar(999) collate utf8_unicode_ci NOT NULL,
  `url` varchar(99) collate utf8_unicode_ci NOT NULL,
  `date` varchar(32) collate utf8_unicode_ci NOT NULL default '00/00/0000 00:00:00',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
 
Afra ca

Afra ca

14/06/2009 13:06:00
Quote Anchor link
DATE als varchar..... Hier zijn in SQL speciale type velden voor, waarmee je ook nog heel mooi binnen sql kan gaan rekenen.

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-types.html
 
Nigel

Nigel

14/06/2009 13:06:00
Quote Anchor link
Pff dit is wel een brein kraker.
Hoe moet ik dit dan in een lijst weergeven.

want ik krijg nu een error?
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

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
<?
$sql
="(SELECT
    'project' as id_type,
    projecten.id as id,
    projecten.naam as naam,
    projecten.aangemaakt_op as date
FROM
    projecten)
UNION
(SELECT
    'scripts' as id_type,
    scripts.id as id,
    scripts.titel as naam,
    scripts.geschreven_op as date
FROM
    nieuws)
ORDER BY
    date DESC "
;
$sql1 = mysql_query($sql) ;
while ($row = mysql_fetch_assoc($sql1)){

echo $row['date'];
}

?>

als ik niks echo heb ik dezelfde error ook.
en ik denk dat ik nu het verkeerde echo?
Gewijzigd op 01/01/1970 01:00:00 door Nigel
 
Joren de Wit

Joren de Wit

14/06/2009 13:07:00
Quote Anchor link
En waar controleer jij of de query die je uitvoert wel gelukt is? Met andere woorden, pas eens de nodige foutafhandeling toe.

ps. Dus iets in de trend van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$sql
= '...'
$result = mysql_query($sql);

if(!$result) {
  trigger_error(mysql_error().' In query: '.$sql);
}

else {
  // Verder met je script
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Nigel

Nigel

14/06/2009 13:14:00
Quote Anchor link
One had toch een connectie.
heb or die(mysql_error()) erachter gezet.

krijg nu dit.
Unknown column 'projecten.aangemaakt_op' in 'field list'
Dus die in date verandert.

Maar goed dan krijg ik de error

Unknown column 'scripts.id' in 'field list'
En die snap ik niet helemaal?
Gewijzigd op 01/01/1970 01:00:00 door Nigel
 
Klaasjan Boven

Klaasjan Boven

14/06/2009 13:17:00
Quote Anchor link
Blanche schreef op 14.06.2009 12:16:
....Ik was in mijn post misschien niet helemaal duidelijk. Het zijn de datatypen die voor een UNION in ieder geval overeen moeten komen wil de query slagen. ...
zelfs dat is niet nodig. In mijn voorbeeld is gemaakt een DATE en link een VARCHAR
 
Joren de Wit

Joren de Wit

14/06/2009 13:25:00
Quote Anchor link
Nigel schreef op 14.06.2009 13:14:
Unknown column 'scripts.id' in 'field list'
En die snap ik niet helemaal?
Je selecteert uit de tabel 'nieuws' dus dan zal de kolom scripts.id inderdaad niet bestaan.

Klaasjan Boven schreef op 14.06.2009 13:17:
zelfs dat is niet nodig. In mijn voorbeeld is gemaakt een DATE en link een VARCHAR
Dat heet MySQL. Zo'n query zal zeker een foutmelding geven in elke zichzelf respecterende database. Het is immers onmogelijk om twee verschillende datatypen met elkaar te mengen, want wat is dan immers het datatype van de resulterende set gegevens?
 

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.