Avatar billede Slettet bruger
18. oktober 2003 - 23:15 Der er 27 kommentarer og
1 løsning

Hjælp til at lave 2 queryes til 1

Hej!

Jeg har følgende (se bort fra PHP kode hvis du kan)

$sql = 'SELECT * FROM emm_kontrol WHERE id="' . $_REQUEST['id'] . '"';
$result = mysql_query($sql);
$row = mysql_fetch_array($result);


$sql = 'SELECT * FROM emm_kontrol WHERE id="' . $row['modul'] . '"';
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

Jeg skal altså lave disse 2 queryes til 1, men er i tvivl om hvordan eftersom MySQL ikke understøtter subqueryes.

Jeg har tænkt på noget i stil med det her:

SELECT     tb1.id,
                    tb2.id
            FROM     emm_kontrol AS tb1,
                    emm_kontrol AS tb2
            WHERE tb2.id = tb1.id

Men det virker naturligvis ikke ;)
Avatar billede arne_v Ekspert
18. oktober 2003 - 23:20 #1
Vil du have de ID'er ud som 2 rækker eller som 2 kolonner ?
Avatar billede Slettet bruger
18. oktober 2003 - 23:20 #2
Hvad med
select * from emm_kontrol where id = parameter1 or id = parameter2
Avatar billede arne_v Ekspert
18. oktober 2003 - 23:25 #3
2 rækker:

brug UNION på de to originale queries (kræver vistnok 4.0)

2 kolonner:

SELECT tb1.*,tb2.*
FROM emm_kontrol AS tb1, emm_kontrol AS tb2
WHERE tb1.id=X AND tb2.id=Y
Avatar billede detox Nybegynder
18. oktober 2003 - 23:25 #4
Er det ikke bare:

$sql = 'SELECT * FROM emm_kontrol WHERE modul="' . $_REQUEST['id'] . '"';
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
Avatar billede detox Nybegynder
18. oktober 2003 - 23:27 #5
Eller er 'id' ikke unik?
Avatar billede Slettet bruger
18. oktober 2003 - 23:28 #6
arne_v> Kan jeg ikke undgå union?

Jeg skal bare hive et id ud, men i nogle tilfælde skal dette id findes ved at relatere til en anden post. En form for simpel rekursiv..ting...

Jeg fandt lige en fejl, det jeg prøver på er det her:

$sql = 'SELECT
tb1.*,
tb2.*
FROM
emm_kontrol AS tb1,
emm_kontrol AS tb2
WHERE
tb1.id = ' . $_REQUEST['id'] . '
AND tb2.id = tb1.modul';
Avatar billede arne_v Ekspert
18. oktober 2003 - 23:32 #7
Hvorfor vil du undgå UNION ?

Forudsat at det er muligt så er det da en yderst effektiv operation !

Og hvorfor den SQL ikke ?
Avatar billede detox Nybegynder
18. oktober 2003 - 23:36 #8
Ok, hvad med:

$sql = "SELECT a.*, b.* FROM  emm_kontrol a JOIN emm_kontrol b ON a.modul = b.id AND a.id = ". $_REQUEST['id']
Avatar billede erikjacobsen Ekspert
18. oktober 2003 - 23:36 #9
select a.id as id1,b.id as id2 from emm_kontrol a left join emm_kontrol b where a.id='$id'
Avatar billede Slettet bruger
18. oktober 2003 - 23:37 #10
Jeg tror det virker nu :)
Avatar billede Slettet bruger
18. oktober 2003 - 23:37 #11
Det blev dog lidt knudret, men..ok..

$sql = 'SELECT tb1.*, tb2.*, tb2.modul as id FROM emm_kontrol AS tb1, emm_kontrol AS tb2 WHERE tb1.id = ' . $_REQUEST['id'] . ' AND tb2.id = tb1.modul';
Avatar billede erikjacobsen Ekspert
18. oktober 2003 - 23:37 #12
select a.id as id1,b.id as id2 from emm_kontrol a left join on a.id=b.modul emm_kontrol b where a.id='$id'

...skal det jo nok være
Avatar billede Slettet bruger
18. oktober 2003 - 23:38 #13
hehe...min er vist den længste og mest knudrede ;)
Avatar billede erikjacobsen Ekspert
18. oktober 2003 - 23:38 #14
Er modulnummerets id altid til stede i tabellen?
Avatar billede erikjacobsen Ekspert
18. oktober 2003 - 23:39 #15
Prøver lige igen (utestet *g*)

select a.id as id1,b.id as id2 from emm_kontrol a left join emm_kontrol b on a.id=b.modul where a.id='$id'
Avatar billede detox Nybegynder
18. oktober 2003 - 23:42 #16
Jamen bare du er tilfreds med resultatet ;-)
Avatar billede Slettet bruger
18. oktober 2003 - 23:47 #17
hehe...

$sql = 'SELECT tb1.modul AS id, tb2.sti FROM emm_kontrol AS tb1, emm_kontrol AS tb2
WHERE tb1.id = ' . $_REQUEST['id'] . ' AND tb2.id = tb1.modul';

Så selecter jeg ikke noget unødvendigt.

Jeg beklager min manglende evne til at forklare, derfor prøver jeg lige:

der er altid et id.

I nogle af rækkerne er der også et modul, det er et id som er hentet fra samme tabel.

Man kan sammenligne det med et forum system med tråde, hvor indlæg kan være ejet af andre indlæg.

Men tak for skubbet i den rigtige retning, jeg takker jer alle.
Avatar billede erikjacobsen Ekspert
18. oktober 2003 - 23:49 #18
Hvis det id der hører til modulet ikke altid er der, skal du bruge en left join.
Test lige med dine data om din sætning holder i det tilfælde.
Avatar billede detox Nybegynder
18. oktober 2003 - 23:53 #19
Men, hvis id er unik, ser det altså ud som om du kan nøjes med:

$sql = 'SELECT modul AS id, sti FROM emm_kontrol WHERE modul = ' . $_REQUEST['id']
Avatar billede detox Nybegynder
18. oktober 2003 - 23:54 #20
Men måske du skulle have lavet et dump af strukturen til at starte med.
Avatar billede Slettet bruger
18. oktober 2003 - 23:57 #21
hehe..ja det skulle jeg nok..men her er den hvis det skulle have interesse:

DROP TABLE IF EXISTS emm_kontrol;
CREATE TABLE emm_kontrol (
  id int(10) unsigned NOT NULL auto_increment,
  modul int(10) unsigned default '0',
  sti varchar(100) default NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;


INSERT INTO emm_kontrol VALUES("1", "0", "mod_helaarshuse_index.php");
INSERT INTO emm_kontrol VALUES("2", "0", "mod_sommerhuse_index.php");
INSERT INTO emm_kontrol VALUES("3", "0", "mod_grunde_index.php");
INSERT INTO emm_kontrol VALUES("4", "0", "mod_erhverv_index.php");
INSERT INTO emm_kontrol VALUES("5", "0", "mod_udlejning_index.php");
INSERT INTO emm_kontrol VALUES("6", "0", "mod_salg_index.php");
INSERT INTO emm_kontrol VALUES("7", "0", "mod_firmaprofil_index.php");
INSERT INTO emm_kontrol VALUES("101", "7", NULL);
INSERT INTO emm_kontrol VALUES("102", "1", NULL);
INSERT INTO emm_kontrol VALUES("8", "0", "mod_soeg_index.php");
INSERT INTO emm_kontrol VALUES("111", "2", NULL);
Avatar billede erikjacobsen Ekspert
19. oktober 2003 - 00:01 #22
Hvad giver en id=1 i din sql så?
Avatar billede Slettet bruger
19. oktober 2003 - 00:03 #23
Den inkluderer mod_helaarshuse_index.php senere.
Avatar billede Slettet bruger
19. oktober 2003 - 00:05 #24
Det hele afhænger af om id > 100, fordi de første 100 er reserveret til inkludering af faste sider.

Så der er 2 forskellige queryes alt efter id.
Avatar billede erikjacobsen Ekspert
19. oktober 2003 - 00:06 #25
*g* oookay - du vinder ...
Avatar billede Slettet bruger
19. oktober 2003 - 00:09 #26
;)

Hele forsøget går på at lave alle min URL's om til ?id=xx i stedet for en masse bavl med at lave ?side=bolig1&modul=93&kat=2&id=102 som jeg hidtil har gjort...

Svar?
Avatar billede Slettet bruger
19. oktober 2003 - 00:10 #27
altså..svar som i læg et svar for point ;)

(Alle 3)
Avatar billede Slettet bruger
22. oktober 2003 - 21:30 #28
nåh...lukketid
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