[PHP] Dubbele variabelen na Join

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Barracuda_82
  • Registratie: September 2001
  • Laatst online: 19-12-2024

Barracuda_82

mkTime(), not war!

Topicstarter
In mijn script worden 2 tabellen gejoined (eentje met de posts van het forum en de andere met de bijbehorende users) en allebei deze tabellen hebben een kolom met de naam ID.

Nu wil ik dus het ID weergeven van het topic, maar dan pakt PHP de ID van de andere tabel. Hoe los ik dit op?

Dit is mijn query:
PHP:
1
mysql_query("SELECT * FROM forum_topics, users WHERE forum_topics.poster=users.ID AND Forum_ID=$ids ORDER BY forum_topics.datum DESC")

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:52
Niet select * doen, maar alle velden die je nodig hebt oproepen en eventueel aliassen gebruiken als je 2x hetzelfde veld hebt.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Ten eerste is het sowieso niet gebruikelijk om * te gebruiken. Som gewoon de kolomnamen die je wilt hebben op. Desnoods geef je ze daar een apparte naam (mbv as) en dan kun je zo het veld eruit halen dat je nodig hebt...

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Sjeik
  • Registratie: Augustus 2001
  • Laatst online: 29-05 14:39
PHP:
1
mysql_query("SELECT * FROM forum_topics, users WHERE forum_topics.poster=users.ID AND forum_topics.Forum_ID=$ids ORDER BY forum_topics.datum DESC")

Moet het niet forum_topics.Forum_ID=$ids zijn? Want nu weet mysql niet uit welke tabel die forum_id moet halen?

Was ik maar rijk en niet zo knap...


Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

Sjeik schreef op 17 June 2003 @ 16:40:
Moet het niet forum_topics.Forum_ID=$ids zijn? Want nu weet mysql niet uit welke tabel die forum_id moet halen?
Alleen als beide tabellen Forum_ID bevatten. Anders weet ie wel dat het alleen uit forum_topics kan komen.

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.


Acties:
  • 0 Henk 'm!

  • Barracuda_82
  • Registratie: September 2001
  • Laatst online: 19-12-2024

Barracuda_82

mkTime(), not war!

Topicstarter
Dus het is niet zo dat die ID kolommen apart opgeslagen worden in een array?

dus waar ik dan normaal $myrow[ID] heb staan, dat het dan $myrow[users.ID] ofzo word?

Ik heb net nog geprobeerd om geen * in mijn select, maar dat krijg ik niet voor elkaar (te veel kolommen)

Acties:
  • 0 Henk 'm!

  • tazitiz
  • Registratie: Augustus 1999
  • Laatst online: 03-08 20:46

tazitiz

dbprutser

Hoi Dit is wel een standaard onderdeel van de sql taal, en heeft een duidelijke oplossing.

je opdracht:
SELECT * FROM forum_topics, users WHERE forum_topics.poster=users.ID AND forum_topics.Forum_ID=$ids....etc

kan je beter zo neerzetten:
SELECT
ft.ID
,ft.name
,u.name
,u.wat je hier ook maar wil hebben....
FROM
forum_topics ft
, users u
WHERE
ft.poster=u.ID
AND
ft.Forum_ID=$ids...etc


zoals je ziet heb je in plaats van de naam een alias aan de tabel gekoppeld,
dit kan je doen om ervoor te zorgen dat het makkelijker onderhoudbaar is (de query)
en je hoeft een stuk minder te typen.

Verder geef je i.p.v. een * per veld aan wat je wil hebben,
eerst de tabelnaam of alias dan punt en dan de kolomnaam.
dit zorgt voor wat minder i/o, en als een tabel uitgebreid wordt met een kolom
blijft je query draaien.

veel succes!
Pagina: 1