Avatar billede well_r Nybegynder
18. maj 2007 - 16:29 Der er 19 kommentarer og
1 løsning

Joine to SELECTs

SELECT * FROM ((select * from blah) JOIN (select * from blah2))

Dette ved jeg er muligt i oracle..men..kan det lade sig gøre i mySQL?

prøver med nogle små tests..men de giver mig fejl
SELECT * FROM (Select * from rachid_web)
Avatar billede maude Nybegynder
18. maj 2007 - 16:57 #1
SELECT * from tabel1
JOIN
select * from tabel2

men er du sikker på at det er det du vil?
Avatar billede kjulius Novice
18. maj 2007 - 21:35 #2
Er du nu også sikker på, at du vil kunne gøre sådan i Oracle? Jeg kender ikke specielt meget til Oracle, men normalt skal du navngive dine "mellemstationer":

SELECT * FROM ((select * from blah) AS tmp1 JOIN (select * from blah2) AS tmp2)
Avatar billede arne_v Ekspert
19. maj 2007 - 02:56 #3
jep

og så som prikken over i'et en join betingelse
Avatar billede well_r Nybegynder
19. maj 2007 - 06:35 #4
ok.. så kan det være at i liiiiige kan hjælpe mig med et SQL kald:
jeg har en tabel..

feed_id | group_id | title | ... | pubDate
==========================================
feed_id og pubDate er primær

jeg ønsker så at lave et udtræk hvor group_id grupperes... men kun i de tilfælde hvor group_id != 0, og derefter sortere i forhold til pubDate..

ved ikke om i fik fat i det?
men noget ala..
select * from (SELECT * from a group by group_id [men kun i tilfælde af at group_id>0, else ikke]) order by pubDate DESC
Avatar billede dkfire Nybegynder
19. maj 2007 - 11:18 #5
SELECT * FROM Tabel1 WHERE group_id <> 0 GROUP BY group_id ORDER BY pubDate

Har ikke lige testet det.
Avatar billede well_r Nybegynder
19. maj 2007 - 18:10 #6
problemet der er jo at den kun viser de steder hvor de ikke er i en gruppe..
dvs alle tilfælde hvor group_id=0 bliver ikke hentet med.. :(
Avatar billede dkfire Nybegynder
20. maj 2007 - 14:04 #7
Okay, så forstå jeg slet ikke hvad det er du vil.
Avatar billede well_r Nybegynder
20. maj 2007 - 19:01 #8
ok..prøver lige igen så.. med nogle eksempler..

feed_id | group_id | title | pubDate
====================================
1 | 0 | tit1 | 1859
2 | 1 | tit1 | 1858
1 | 0 | tit1 | 1857
1 | 0 | tit1 | 1856
3 | 1 | tit1 | 1855
1 | 0 | tit1 | 1854
1 | 0 | tit1 | 1853

Det udtræk jeg ønsker skal være sådan her:
1 | 0 | tit1 | 1859
2 | 1 | tit1 | 1858 // efter forekomsten af første group_id
3 | 1 | tit1 | 1855 // skal alle med samme gruppe komme ind
1 | 0 | tit1 | 1857 // og ellers fortsætter vi som før..
1 | 0 | tit1 | 1856
1 | 0 | tit1 | 1854
1 | 0 | tit1 | 1853
Avatar billede well_r Nybegynder
20. maj 2007 - 19:15 #9
feed_id | group_id | title | pubDate
====================================
1 | 0 | tit1 | 1859
2 | 1 | tit1 | 1858
1 | 0 | tit1 | 1857
1 | 2 | tit1 | 1856
3 | 1 | tit1 | 1855
1 | 2 | tit1 | 1854
1 | 0 | tit1 | 1853

Det udtræk jeg ønsker skal være sådan her:
1 | 0 | tit1 | 1859
2 | 1 | tit1 | 1858
3 | 1 | tit1 | 1855
1 | 0 | tit1 | 1857
1 | 2 | tit1 | 1856
1 | 2 | tit1 | 1854
1 | 0 | tit1 | 1853

Det her eksempel er vist lidt bedre..
Avatar billede kjulius Novice
20. maj 2007 - 20:38 #10
Måske sådan (eller noget lignende - jeg har ikke testet det):

SELECT *
FROM
(SELECT *
  (
  SELECT group_id, MAX(pubDATE) AS SortDate
  FROM dinTabel
  WHERE group_id <> 0
  GROUP BY group_id
  ) as g
INNER JOIN dinTabel t1 ON t1.group_id = g.group_id
UNION ALL
SELECT t2.*, t2.pubDATE AS SortDate
FROM dinTabel t2
WHERE group_id = 0
) AS t
ORDER BY t.SortDate
Avatar billede well_r Nybegynder
20. maj 2007 - 21:06 #11
nu har jeg lavet verdens største og nok mest fucked up hack i PHP.. men tester lige dit SQL snart..er lige igang med noget :D
Avatar billede kjulius Novice
20. maj 2007 - 22:01 #12
Okay, så kan jeg måske lige nå at redde en alvorlig fejl :-) - der mangler et FROM:

SELECT *
FROM
(SELECT *
FROM
  (
  SELECT group_id, MAX(pubDATE) AS SortDate
  FROM dinTabel
  WHERE group_id <> 0
  GROUP BY group_id
  ) as g
INNER JOIN dinTabel t1 ON t1.group_id = g.group_id
UNION ALL
SELECT t2.*, t2.pubDATE AS SortDate
FROM dinTabel t2
WHERE group_id = 0
) AS t
ORDER BY t.SortDate DESC

(Der kan stadig være fejl - forhåbentlig bare ikke så indlysende fejl...)
Avatar billede well_r Nybegynder
22. maj 2007 - 13:21 #13
#1222 - The used SELECT statements have a different number of columns  ??
Avatar billede well_r Nybegynder
22. maj 2007 - 13:34 #14
hmm er på sporet af noget nu..
den union er nemlig RET dejlig :)
er i fuld gang.. så vender tilbage når jeg går i stå..
Avatar billede well_r Nybegynder
22. maj 2007 - 13:47 #15
det virker! :D
SELECT * FROM
(SELECT
news.group_id,
news.title,
news.tags,
news.link,
news.hits,
news.pubDate,
grouping.pubDate as sortDate
FROM giga_news as news
JOIN (giga_news_grouping as grouping)
ON (news.group_id=grouping.group_id)
) as a
UNION ALL
SELECT
news.group_id,
news.title,
news.tags,
news.link,
news.hits,
news.pubDate,
news.pubDate as sortDate FROM giga_news as news where group_id=0
Avatar billede well_r Nybegynder
22. maj 2007 - 13:51 #16
SELECT * FROM
(SELECT
news.group_id,
news.title,
news.tags,
news.link,
news.hits,
news.pubDate,
grouping.pubDate as sortDate
FROM giga_news as news
JOIN (giga_news_grouping as grouping)
ON (news.group_id=grouping.group_id)
) as a
UNION ALL
SELECT
news.group_id,
news.title,
news.tags,
news.link,
news.hits,
news.pubDate,
news.pubDate as sortDate FROM giga_news as news where group_id=0
ORDER BY sortDate
Avatar billede well_r Nybegynder
22. maj 2007 - 13:51 #17
tak for hjælpen.. den union var fandme lækker..
smid et svar og vind 15 point :P
Avatar billede well_r Nybegynder
22. maj 2007 - 14:43 #18
$SQL = "
        SELECT
feed_id, group_id, title, tags, sorteret.link, hits, pubDate, sortDate, cat.cat_id, cat.cat_name,f.name,f.link as feed_link,last_update
FROM (
        SELECT * FROM
            (SELECT
            news.feed_id,
            news.group_id,
            news.title,
            news.tags,
            news.link,
            news.hits,
            news.pubDate,
            grouping.pubDate as sortDate
            FROM giga_news as news
            JOIN (giga_news_grouping as grouping)
            ON (news.group_id=grouping.group_id)
        ) as a
        UNION ALL
        SELECT
            news.feed_id,
            news.group_id,
            news.title,
            news.tags,
            news.link,
            news.hits,
            news.pubDate,
            news.pubDate as sortDate FROM giga_news as news where group_id=0
        ) as sorteret JOIN (giga_category as cat, giga_feeds as f) ON (cat.cat_id=f.cat_id AND f.id=feed_id)";

Det her er nok den ondeste SQL sætning jeg har lavet.. LÆNGE!
Avatar billede kjulius Novice
22. maj 2007 - 18:26 #19
Ja, den ser ret led ud! :-)
Avatar billede well_r Nybegynder
22. maj 2007 - 19:12 #20
tak for hjælpen med at få den syntax til at funke..
hygge
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester