[PHP] koppeling van 2 tabellen in query

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hoi Hoi,

ik heb nu 2 query's die resulaten geven uit 2 verschillende tabellen zie hier:

1) $query="select * from artikel_oms order by artnr";
2) $query="select * from artikelen where status='O' and web='O' order by artnr";

nu moet ik eigenlijk een query hebben dat ik de resultaten moet hebben van de 2e query, maar dan alleen de results die NIET voorkomen in de 1e query(artnr)...

kortom als het artikelnummer voorkomt in de tabellen : "artikel_oms" en "artikelen" dan mag ie niet weergeven.
dus: ik wil een selectie hebben van de artikelen uit de artikelen tabel waarvan status ='O' en web='O' EN waarvan t artikelnr niet voorkomt in de artikel_oms tabel.

iemand enig idee wat voor een query het dan moet worden? ik kom er ff niet uit...

alvast bedankt

  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 16:17

Koppensneller

winterrrrrr

Welke database gebruik je (MSSQL, MySQL, etc.) en welke versie daarvan? Dit ivm met het gebruik van eventuele subqueries...

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Zoek eens op wat (outer) joins zijn, en dan zul je zien dat je die hier mooi kunt toepassen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
MySQL 4.0.24 gebruik ik

Verwijderd

gebruik anders ff joins

Verwijderd

Topicstarter
totaal mee onbekend, ben al aan t googlen maar is nog redelijk onduidelijk, iemand toevallig een duidelijk voorbeeld?

de dingen die ik kan vinden is om de tabellen te koppelen voor zelfde resultaten, de bedoeling is dus dat hij eigenlijk alle artikelen pakt MINUS de artikelen die betsaan in de artikel_oms

[ Voor 46% gewijzigd door Verwijderd op 16-02-2006 11:27 ]


  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 16:17

Koppensneller

winterrrrrr

Verwijderd schreef op donderdag 16 februari 2006 @ 11:22:
totaal mee onbekend, ben al aan t googlen maar is nog redelijk onduidelijk, iemand toevallig een duidelijk voorbeeld?
Hier wordt het erg duidelijk uitgelegd, neem dat even door en je bent een stuk wijzer:

http://www.w3schools.com/sql/sql_join.asp

Verwijderd

Topicstarter
in je voorbeeld staat:

Example LEFT JOIN

Syntax

SELECT field1, field2, field3
FROM first_table
LEFT JOIN second_table
ON first_table.keyfield = second_table.foreign_keyfield

List all employees, and their orders - if any.

SELECT Employees.Name, Orders.Product
FROM Employees
LEFT JOIN Orders
ON Employees.Employee_ID=Orders.Employee_ID

The LEFT JOIN returns all the rows from the first table (Employees), even if there are no matches in the second table (Orders). If there are rows in Employees that do not have matches in Orders, those rows also will be listed.

Result
Name Product
Hansen, Ola Printer
Svendson, Tove
Svendson, Stephen Table
Svendson, Stephen Chair
Pettersen, Kari


de resultaten die ik dus wil zien is: Tove, Svendson en Petterson, Kari..... en niet degene met een printer e.d. dat wordt nergens uitgelegd.... OF ben ik nou zo dom?

[ Voor 3% gewijzigd door Verwijderd op 16-02-2006 11:31 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je hebt gelezen dat een left join een link maakt voor elk record in de ene tabel met een record in de andere tabel? Waarden die niet bestaan worden ingevuld met NULL. Dan hoef je toch niet meer te doen dan checken of een veld al dan niet NULL is? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 16:17

Koppensneller

winterrrrrr

Daar kun je MINUS voor gebruiken. Die trekt de resultaten van de ene query af van de andere:

SQL:
1
2
3
4
5
SELECT artikelnummer FROM artikel_oms

MINUS

SELECT artikelnummer FROM artikelen


Het is alweer een tijdje geleden dat ik intensief met SQL bezig ben geweest, dus er is misschien een snellere/betere manier te bedenken...

-NMe- heeft hierboven je oplossing :)

[ Voor 6% gewijzigd door Koppensneller op 16-02-2006 11:38 . Reden: reactie van -NMe- gelezen ]


Verwijderd

Topicstarter
$query="select artnr from artikelen where status='0' AND web'0' LEFT JOIN artikel_oms
ON artikelen.artnr=artikel_oms where ???='NULL'


volgens mij ben ik er dan zo bijna ofniet?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Joinen na je where? En voor NULL-checks gebruik je de IS-operator, niet de =. ;)
SQL:
1
2
3
SELECT artikelen.artnr
FROM artikelenLEFT JOIN artikel_oms ON artikelen.artnr = artikel_oms.artnr
WHERE (status= '0') AND (web = '0') AND (veld_dat_alleen_in_artikel_oms_staat IS NULL)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
ik heb nu dit, maar ik krijg geen resultaat waarvan ik zeker weet dat er artikelen zijn zonder dat er een artikel_oms.oms van is..... opties???

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<option value="Selecteer hier uw artikelnummer" selected>Selecteer hier uw artikelnummer</option>
<?php
include('../../library/profiel.php');
$query="SELECT * FROM artikelen LEFT JOIN artikel_oms ON artikelen.artnr = artikel_oms.artnr
WHERE (artikelen.status= '0') AND (artikelen.web = '0') AND (artikel_oms.oms IS NULL)";
$conn = mysql_connect("localhost","$company_login","$company_passwd") or die ("Geen connectie met database");
$db = mysql_select_db("$company_database") or die ("Database niet geselecteerd");
$result = mysql_query($query) or die( mysql_error() );
$number_cols = mysql_num_fields($result);
while ($row = mysql_fetch_row($result))
      {
         for ($i=0; $i<$number_cols; $i++)
         {
            if ($i==0) {$id=$row[$i];}
            if ($i==1) {$artnr=$row[$i];}
         } 
echo "                  <option value=\"$artnr\">$artnr</option>";
         }       
    ?>

[ Voor 53% gewijzigd door Verwijderd op 16-02-2006 12:07 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Laat even alle PHP weg, het gaat hier alleen nog om je query.
SQL:
1
2
3
SELECT * FROM artikelen
LEFT JOIN artikel_oms ON artikelen.artnr = artikel_oms.artnr
WHERE (artikelen.status= '0') AND (artikelen.web = '0') AND (artikel_oms.oms IS NULL)

Wat je hier doet is alle omschrijvingen zoeken en de eventueel bijbehorende artikelen. Precies omgekeerd dus.

Disregard ik zit zelf scheel te kijken 8)7 :D

[ Voor 10% gewijzigd door kenneth op 16-02-2006 12:35 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Topicstarter
na kleine wijziging werkt het gelukkig:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<select name="artnr" id="artnr">
                  <option value="Selecteer hier uw artikelnummer" selected>Selecteer hier uw artikelnummer</option>
<?php
include('../../library/profiel.php');
$query="SELECT * FROM artikelen LEFT JOIN artikel_oms ON artikelen.artnr = artikel_oms.artnr
WHERE (artikelen.status= 'O') AND (artikelen.web = 'O') AND (artikel_oms.oms IS NULL) order by artikelen.artnr";
$conn = mysql_connect("localhost","$company_login","$company_passwd") or die ("Geen connectie met database");
$db = mysql_select_db("$company_database") or die ("Database niet geselecteerd");
$result = mysql_query($query) or die( mysql_error() );
$number_cols = mysql_num_fields($result);
while ($row = mysql_fetch_row($result))
      {
         for ($i=0; $i<$number_cols; $i++)
         {
            if ($i==0) {$id=$row[$i];}
            if ($i==1) {$artnr=$row[$i];}
         } 
echo "                  <option value=\"$artnr\">$artnr</option>";
         }       
    ?>
                        </select>   


de nul en de hoofdletter o maken het verschil uit, samen met wat order by regeltjes....


met heeeeel veel dank aan: -NMe-, my hero of today
Pagina: 1