[LØST] MySQL opslag

peque
Antal: 954
Tilmeldt:
20-04-2005
User is offline
[LØST] MySQL opslag

Hejsa gruppe
Jeg har et lille spørgsmål omkring MySQL

Jeg har 2 tabeller
Users og vessels

tbl 1
+-----+------+------------+---------------------+
| uid | name | lastname   | timestamp           |
+-----+------+------------+---------------------+
tbl 2 vessels
+----+---------+-----------------+-----+---------+------+--------+
| id   | imo      | name             | sid  | snr       | uid    | active |
+----+---------+-----------------+-----+---------+------+--------+

Mit sql kald ser således ud PT - men der mangler noget
SELECT users.uid,users.name,users.lastname,users.timestamp,vessels.name from users,vessels where users.state='X' AND users.uid=vessels.uid;

Som det ses her ønsker jeg
uid name lastname og timestamp fra users tabellen - samtidigt med jeg ønsker at få navnet fra vessels tabellen hvor mit username står i uid.
Dert fungerer reelt set fint så længe der er noget i vessels.uid - Men hvis det er tomt eller NULL kommer kommer der empty resultset - Hvilket er logisk sålænge vesselsd.uid er tomt - så er der ikke noget resultat .

Kan man på nogen måde acceptere et tomt felt - eller skrive sig ud af - at feltet vessels.uid kunne være tomt - og derfor ikke kunne bruges med i sammenligningen!

Alt således at jeg får users.uid users.name users.lastname users timestamp samt vessels.name HVIS users.uid=vessels.uid

Håber det giver lidt mening


ejvindh
Antal: 38
Tilmeldt:
17-05-2010
User is offline
Duer dette? SELECT

Duer dette?

SELECT users.uid,users.name,users.lastname,users.timestamp,vessels.name
      from users,vessels
      where users.state='X' AND
        (users.uid=vessels.uid OR vessels.uid IS NULL);

ejvindh
Antal: 38
Tilmeldt:
17-05-2010
User is offline
Njaah....nok næppe. For så

Njaah....nok næppe. For så ved databasen jo ikke, hvad den skal joine... Den skal jo have at vide HVILKET vessels.name den skal koble sammen med user-data.

Jeg tror du vil komme længere med at tilrette strukturen på din database. Normalt plejer man vel også at sige, at en tabel-id skal være required -- typisk ved at sætte den til autoincrement. Ellers får du noget bøvl med at joine tabeller.


marlar
Antal: 2952
Tilmeldt:
05-12-2009
User is offline
Prøv med LEFT JOINSELECT

Prøv med LEFT JOIN

SELECT
    users.uid,
    users.name,
    users.lastname,
    users.timestamp,
    vessels.name
FROM
    users
        LEFT JOIN
    vessels ON users.uid = vessels.uid
WHERE
    users.state = 'X'

peque
Antal: 954
Tilmeldt:
20-04-2005
User is offline
@Marlar Det var lige den

@Marlar

Det var lige den jeg manglende - Så det var selve syntaksen jeg havde en lille fejl i !