Twee tabellen als union
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$query = "(SELECT id, titel, text, datum FROM nieuws WHERE zichtbaar = '1')
UNION (SELECT id, titel, text, datum FROM weblog WHERE zichtbaar = '1') ORDER BY datum DESC LIMIT 5";
$result = mysql_query($query);
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
if (!$line['text'] == "") {
$id = $line['id'];
$titel = $line['titel'];
if (isset($line['iets_wat_ik_nog_niet_weet'])) {
$titel = "string".$line['titel'];
};
};
};
?>
$query = "(SELECT id, titel, text, datum FROM nieuws WHERE zichtbaar = '1')
UNION (SELECT id, titel, text, datum FROM weblog WHERE zichtbaar = '1') ORDER BY datum DESC LIMIT 5";
$result = mysql_query($query);
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
if (!$line['text'] == "") {
$id = $line['id'];
$titel = $line['titel'];
if (isset($line['iets_wat_ik_nog_niet_weet'])) {
$titel = "string".$line['titel'];
};
};
};
?>
Nou wil ik dus de records uit de weblog tabel een string toevoegen in hun titel (zie de meest geneste IF). Maar hoe kan ik nou testen uit welke tabel hij komt?? iets in de trand van $line[weblog.titel] of $line[nieuws.titel] werkt niet met de huidige query.
Gewijzigd op 01/01/1970 01:00:00 door Jaws
Ik heb dus 2 tabellen. Een met weblog berichten en een met nieuws berichten. Deze wil ik gesorteerd op datum en dan de laatste 5 laten tonen in een headline menutje (zoals phphulp hier links ook heeft). Dat tonen van die headlines is geen probleem. Wat wel een probleem is dat ik niet weet hoe ik kan checken welke id nou van welke tabel afkomstig is.
Dus ofwel: If (tabel1) then {maak die url + evt. nog iets anders}
If (tabel2) then {maak die url + evt. nog iets anders}
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$query = "(SELECT id AS nieuws_id, titel, text, datum FROM nieuws WHERE zichtbaar = '1')
UNION (SELECT id AS weblog_id, titel, text, datum FROM weblog WHERE zichtbaar = '1') ORDER BY datum DESC LIMIT 5";
$result = mysql_query($query);
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
if (!$line['text'] == "") {
if ($line['nieuws_id']) {
$id = $line['id'];
$titel = $line['nieuws'];
};
if ($line['weblog_id']) {
$id = $line['id'];
$titel = "[blog]".$line['titel'];
};
};
};
?>
$query = "(SELECT id AS nieuws_id, titel, text, datum FROM nieuws WHERE zichtbaar = '1')
UNION (SELECT id AS weblog_id, titel, text, datum FROM weblog WHERE zichtbaar = '1') ORDER BY datum DESC LIMIT 5";
$result = mysql_query($query);
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
if (!$line['text'] == "") {
if ($line['nieuws_id']) {
$id = $line['id'];
$titel = $line['nieuws'];
};
if ($line['weblog_id']) {
$id = $line['id'];
$titel = "[blog]".$line['titel'];
};
};
};
?>
Ik heb tevens bovenstaande query eens uitgevoerd in Mysql Query Browser en wat hij dan doet is "nieuws_id" als kolomnaam gebruiken. Zo krijgen ze dus allemaal nieuws_id als kolom naam en heb ik nog geen mogelijkheid te checken welk record nou nieuws en welkt nou weblog is.
Geen MySql of beter Sql mensen hierzo? :)
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if (!$result = mysql_query($query)) {
echo '<pre>';
echo mysql_errno () . ': ' . mysql_error ();
echo htmlentities ($query);
echo '</pre>';
}
?>
if (!$result = mysql_query($query)) {
echo '<pre>';
echo mysql_errno () . ': ' . mysql_error ();
echo htmlentities ($query);
echo '</pre>';
}
?>
De query opzich lukt gewoon. Ik krijg dus mooi een rijtje van:
-headline1
-headline2
-headline3
-headline4
-headelin5
Gesorteert op datum DESC.
Wat ik nu wil doen is de headlines die uit de Weblog tabel komen een string met "[blog" voor de headline te plakken dus dit zou een mogelijk juiste output kunnen zijn:
-[blog]headline1
-headline2
-[blog]headline3
-[blog]headline4
-headelin5
Maar die output kan ik alleen maken als ik weet wanneer een $line/row in de mysql_fetch_array() van welke tabel afkomstig is. Misschien moet ik om dit te kunnen testen de query wijzigen maar zou niet weten hoe, kan het ook niet vinden in Google. Toch denk ik dat er een niet al te moeilijke oplossing voor moet zijn.