Twee tabellen als union

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jaws

Jaws

07/02/2007 22:57:00
Quote Anchor link
Ik heb 2 tabellen bij elkaar gegooid middels een union, zie query in code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'];
             };
        };
    };

?>


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
 
PHP hulp

PHP hulp

20/11/2024 02:30:38
 
Jaws

Jaws

08/02/2007 12:38:00
Quote Anchor link
Ik zal het nog wat simpeler proberen te stellen.

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}
 
Joren de Wit

Joren de Wit

08/02/2007 15:59:00
Quote Anchor link
Geef je tabelnamen aliassen mee:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
    id AS weblog_id,
    titel AS weblog_titel
FROM
    weblog
WHERE
    zichtbaar = 1
UNION SELECT
    id AS nieuws_id,
    titel AS nieuws_titel
FROM
    nieuws
WHERE zichtbaar = 1
 
Jaws

Jaws

08/02/2007 16:06:00
Quote Anchor link
De query voert hij wel uit zonder errors, maar mijn variabelen vullen zich niet. Heb nu deze code.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'];
             };
         };
      };

?>
 
Jaws

Jaws

09/02/2007 17:06:00
Quote Anchor link
Bump...

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? :)
 
Jan Koehoorn

Jan Koehoorn

09/02/2007 17:42:00
Quote Anchor link
Bij een UNION moet je wel zorgen dat je dezelfde veldnamen hebt na de respectievelijke SELECT statements. Verder moet je absoluut controleren of je query lukt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
    }

?>
 
Jaws

Jaws

09/02/2007 20:01:00
Quote Anchor link
Ja dat was me al duidelijk dat dit moest bij een UNION, maar ik had toch de suggestie van "Blanche" geprobeerd vandaar die AS nog erbij.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.