[SQL / PHP] tabel naam als kolom

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • timbo007up
  • Registratie: September 2005
  • Laatst online: 14-08-2024
Hallo,

Ik ben bezig om een soort van laatste items systeem te bouwen. op dit moment heb ik 3 tabellen die ik tegelijk in 1 query wil uitlezen. dat is opzich niet het punt, maar ik wil ook nog weten uit welke tabel ze komen. weet iemand hoe ik dit moet doen?

Ik wil dit met 1 query doen zodat het makkelijker is om ze te sorteren op datum en tijd.

ik weet dat ik het ook kan doen door alles in een bestand te zetten als ze geplaatst/geupdate worden. maar ik wil dit het liefst in 1 query.

Bij voorbaat dank.

Acties:
  • 0 Henk 'm!

  • lier
  • Registratie: Januari 2004
  • Laatst online: 12:19

lier

MikroTik nerd

Je kan in een query gebruik maken van aliassen. Hierin zou je de tabelnam kunnen plaatsten. Het nut is mij onduidelijk, maar het is natuurlijk jouw feestje...

code:
1
SELECT tabel1.kolom1 AS tabelnaam.kolomnaam FROM ...

Eerst het probleem, dan de oplossing


Acties:
  • 0 Henk 'm!

  • Glewellyn
  • Registratie: Januari 2001
  • Laatst online: 07-09 08:10

Glewellyn

is er ook weer.

lier schreef op dinsdag 04 december 2007 @ 09:55:
Je kan in een query gebruik maken van aliassen. Hierin zou je de tabelnam kunnen plaatsten. Het nut is mij onduidelijk, maar het is natuurlijk jouw feestje...

code:
1
SELECT tabel1.kolom1 AS tabelnaam.kolomnaam FROM ...
Daarmee zie je in de rijen van je resultset nog steeds de tabelnamen niet terugkomen....

Misschien dat TS zijn voorlopige query kan posten?

*zucht*


Acties:
  • 0 Henk 'm!

  • Johan.B
  • Registratie: Maart 2007
  • Laatst online: 11-09 15:38
In de select clausule van je query zet je toch welke velden uit welke tabel je wil hebben? Ik veronderstel dat je bij het inserten van een nieuw record ook een timestamp meegeeft? Dan kan je order by "timestamp" doen om alles te sorteren op datum en tijd?

Post eens wat meer informatie:

Welke query heb je al?
Hoe zien je 3 tabellen er uit?
Post het stukje php code om je query uit te voeren en om je resultaten op het scherm te tonen.

[ Voor 12% gewijzigd door Johan.B op 04-12-2007 09:59 ]


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

SQL:
1
2
3
4
5
select 'Table 1' as Table, * from table_1
union
select 'Table 2' as Table, * from table_2
union
....

De velden uit " moeten wel bij alle queries hetzelfde zijn.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

Verwijderd

@ Niemand_Anders :
Check color-coding: table is een gereserveerd woord! ;)

Acties:
  • 0 Henk 'm!

  • timbo007up
  • Registratie: September 2005
  • Laatst online: 14-08-2024
Op dit moment heb ik eigenlijk alleen losse querys en geprobeerd om ze d.m.v. php te sorteren op datum en tijd maar dat wil niet echt lukken.
Ik heb bij alle tabellen de velden id, titel, bericht en een datetime veld.de date time heb ik opgesplitst in de velden 'datum' en 'tijd'.

zo heb ik b.v. de tabel nieuws, de tabel verslagen, tabel agenda.

SQL:
1
2
3
4
5
6
7
SELECT `id`, `titel`, `bericht`,
    DATE_FORMAT(`datum`, '%d-%m-%Y') as `datum`, 
    DATE_FORMAT(`datum`, '%H:%i:%s') as `tijd`
     FROM `verslag`
WHERE `zichtbaar` = 1
     ORDER BY `datum` ASC, `tijd` DESC
     LIMIT $start, {$this->max_per_page}";


zo moet ik de tabbelen doorlopen en een extra veld hebben dus zeg maar tabel_naam as 'tabel'.

ik zal zo de oplossing van niemand anders proberen. jullie horen het nog.

Acties:
  • 0 Henk 'm!

  • timbo007up
  • Registratie: September 2005
  • Laatst online: 14-08-2024
ok op dit moment heb ik deze query:
code:
1
2
3
4
5
6
7
8
9
10
SELECT 'Nieuws' AS `table` , `id` , `titel` , `bericht` , DATE_FORMAT( `datum` , '%d-%m-%Y' ) AS `datum` , DATE_FORMAT( `datum` , '%H:%i:%s' ) AS `tijd` 
FROM `nieuws` 
WHERE `zichtbaar` =1
ORDER BY `datum` ASC , `tijd` DESC 
UNION SELECT 'Verslag' AS `table` , `id` , `titel` , `verslag` AS `bericht` , DATE_FORMAT( `datum` , '%d-%m-%Y' ) AS `datum` , DATE_FORMAT( `datum` , '%H:%i:%s' ) AS `tijd` 
FROM `verslagen` 
WHERE `zichtbaar` =1
ORDER BY `datum` ASC , `tijd` DESC

LIMIT 0,5


maar dan krijg ik een fout dat het niet goed gebruik van de ORDER BY functie. maaar anders krijg ik het niet goed geordent. verder werkt het wel =)

Acties:
  • 0 Henk 'm!

  • Valkske
  • Registratie: November 2002
  • Laatst online: 11-09 20:41
Hey. Als ik het een beetje goed begrijp, moet je volgens mij eens kijken of je niet een beetje kan generaliseren, en verslagen en berichten in 1 tabel opslaan en een veldje toevoegen 'type' met daarin de identifier 'verslag' of 'bericht'.
Vermits je die gegevens toch tegelijk wil ophalen en ze dus zeker gemeenschappelijke kolommen hebben?

edit: ik had een extra select bijgevoegd, maar dat had je blijkbaar zelf al gevonden, dus heb hem weer weggehaald

[ Voor 114% gewijzigd door Valkske op 04-12-2007 11:47 ]


Acties:
  • 0 Henk 'm!

  • timbo007up
  • Registratie: September 2005
  • Laatst online: 14-08-2024
dat is mischien nog een idee, maar ik denk dat ik al een aardig eind ben. ik zal zometeen de query laten zien als ik klaar ben =)

Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 10-09 06:36

ATS

Ik kan me voorstellen* dat het sorteren niet goed gaat, en wel om twee redenen:
je gebruikt een AS 'datum' terwijl 'datum' ook voor komt in je brontabellen. Probeer eens unieke veldnamen?
Een ander probleem is dat je nu probeert te sorteren op een string-representatie van je datum. Dat gaat natuurlijk niet goed. Je gaat dit soort dingen krijgen:

1-1-2008
12-1-2008
2-1-2008

Dat is vast niet de bedoeling.
*) Bij gebrek aan een concrete foutmelding

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 11-09 15:48
De 'ORDER BY' moet echt als allerlaatste in de query.
Deze mag voor de UNION niet voorkomen.

dus fout:
[sq]
select * from table
order by tableid
union
select * from anothertable
order by tableid
[/sql]

goed:
[sql]
select * from table
union
select * from anothertable
order by tableid
[/sql]

Hij gaat het gehele resultaat pas ordenen. Daarom moet het niet eerder in de query voorkomen.

let the past be the past.


Acties:
  • 0 Henk 'm!

  • timbo007up
  • Registratie: September 2005
  • Laatst online: 14-08-2024
ik heb het al uitgevonden =) maar heel erg bedankt voor de tips :D

dit is de huidige code (die nog iets uitgebreider moet worden maar geeft goed een goed beeld van hoe en wat):

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(SELECT 
                'Nieuws' as `table`, `id`, `titel`,`bericht`,
                DATE_FORMAT(`datum`, '%d-%m-%Y') as `datum`, 
                DATE_FORMAT(`datum`, '%H:%i:%s') as `tijd`,
                max( `datum` ) as `mdi`
              FROM `nieuws`
              WHERE `zichtbaar` = 1
              GROUP BY `id`
              )
              
              UNION
              
              (SELECT 
                'Verslag' as `table`, `id`, `titel`,`verslag` AS `bericht`,
                DATE_FORMAT(`datum`, '%d-%m-%Y') as `datum`, 
                DATE_FORMAT(`datum`, '%H:%i:%s') as `tijd`,
                max( `datum` ) as mdi
              FROM `verslagen`
              WHERE `zichtbaar` = 1
              GROUP BY `id`)
              
              ORDER BY `mdi` DESC
              LIMIT 0,$aantal

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 00:41

TeeDee

CQB 241

Niet om het een of 't ander, maar je ziet dat je nu al aan het truuken moet om je data uit je DB te krijgen. Ik zou toch ook eens de tip van Valkske bekijken.

Heart..pumps blood.Has nothing to do with emotion! Bored

Pagina: 1