WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hämta från 2 tabeller i mysql (https://www.wn.se/forum/showthread.php?t=36614)

KUB 2009-05-04 17:59

Ger upp, gett google en bra stund men vet inte om jag söker efter rätt ord.

Har 2 tabeller i min databas med medlemmar, i den ena ligger grunduppgifterna och i den andra lite övrig information.

Jag har en PHP kod som hämtar info från databasen och skapar en tabell för utskrift, men lyckas inte komplettera så infon från bägge blir rätt.

Så här är tanken att det ska se ut:

http://213.115.231.40/~vastgota/register.php

Fast i rätt ordning:
1 [email protected] Kaj Kajsasson Helenegatan 5a 11731 Stockholm 12345 67890745
2222 [email protected] Arne Anka Ankvägen 13 13133 Ankeborg 0513-40000 070-3456709

Koden ser ut så här:

___________
<?php

echo "<h2>Lista över kunder</h2>";

// ansluter till databasen
$opendb = mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("db") or die(mysql_error());

// hämtar information från den angivna tabellen
$result = mysql_query("SELECT * FROM user_accounts as one, user_details as two") or die(mysql_error());


// HTML-tabellens formatering - tabellstart
echo "<table border='1' bordercolor='#cccccc' cellspacing='0' cellpadding='3'>";
echo "<tr bgcolor='#cccccc'><td>Kundnr</td>
<td>E-post</td><td>Namn</td><td>Adress</td><td>Postnummer</td><td>Ort</td><td>Telefon</td><td>Mobil</td></tr>";

// hämtar resultatrader från tabellen
while($row = mysql_fetch_array( $result ))
{
// skriver ut innehållet i raderna till HTML-tabellen
echo "<tr><td>";
echo $row['id'];
echo "</td><td>";
echo $row['mail'];
echo "</td><td>";
echo $row['name'];
echo "</td><td>";
echo $row['address'];
echo "</td><td>";
echo $row['postalno'];
echo "</td><td>";
echo $row['postaladdress'];
echo "</td><td>";
echo $row['telephone'];
echo "</td><td>";
echo $row['cellphone'];
echo "</td></tr>";
}

// HTML-tabellens formatering - tabellslut
echo "</table>";

// stänger databasen
mysql_close($opendb);

?>
_______________

Kundnr(id) finns i bägge tabellerna,

I user_account finns id + e-post, övrigt ligger i user_details.


Känns som jag gör en väldigt lätt fråga onödigt svår ;-)

cortex 2009-05-04 18:11

$result = mysql_query("SELECT * FROM user_accounts as one, user_details as two ORDER by id DESC") or die(mysql_error());

*verkar som jag förstod frågan fel...*

macwiz 2009-05-04 18:12

testa:

$result = mysql_query("SELECT one.id, one.mail, two.name, two.address, two.postalno, two.postaladdress, two.telephone, two.cellphone FROM user_accounts as one, user_details as two where one.id=two.id order by one.id") or die(mysql_error());

KUB 2009-05-04 22:13

Citat:

Originally posted by macwiz@May 4 2009, 18:12
testa:
result = mysql_query(SELECT one.id, one.mail, two.name, two.address, two.postalno, two.postaladdress, two.telephone, two.cellphone FROM user_accounts as one, user_details as two where one.id=two.id order by one.id) or die(mysql_error());


Unknown column 'two.id' in 'where clause'

Lundmark 2009-05-04 22:22

I user_details har du någon kolumn som heter id där? eller vad är det som ska koppla dem samman?

objx 2009-05-04 22:32

Denna borde fungera:

SELECT one.*,two.* FROM user_accounts AS one INNER JOIN user_details AS two ON one.id=two.id

Du kan även sätta in en WHERE-sats efter JOIN-satsen, t.ex så här:

SELECT one.*,two.* FROM user_accounts AS one INNER JOIN user_details AS two ON one.id=two.id WHERE one.id > 20

Tänk bara på en sak:
Om du använder ovanstående SELECT-sats så hämtas samtliga kolumner från båda tabellerna. Detta innebär att om både user_accounts och user_details har en kolumn som heter "epost" så kommer endast en av dessa att hämtas (jag tror att det är user_details version som gäller eftersom INNER JOIN skriver över dubletter i den andra tabellen).

Jag brukade snegla på IDG's artiklar när en JOIN-sats gick snett förut:
http://iwtjanster.idg.se/webbstudio/...ikel.asp?id=75
http://iwtjanster.idg.se/webbstudio/...ikel.asp?id=76
http://iwtjanster.idg.se/webbstudio/...kel.asp?id=230
http://iwtjanster.idg.se/webbstudio/...kel.asp?id=232

Hoppas det löser sig!

Perben 2009-05-05 10:25

Låter väl som en vanligt left join, förutsatt att du har vettiga nycklar i båda tabellerna.

select * from user_accounts left join user_details on one.id = two.id where ... order by ...

eller använd någon annan join beroende på om du vill visa användare som inte har någon post i user_details eller inte.

KUB 2009-05-05 10:40

Jätte tack för hjälpen, om nån annan har liknade bekymmer så gjorde denna susen:

SELECT one.*,two.* FROM com_module_user_accounts AS one INNER JOIN com_module_user_account_details AS two ON one.id=two.user WHERE one.id


Alla tider är GMT +2. Klockan är nu 02:00.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson