webForumDet fria alternativet

Hämta data ur olika tabeller i samma databas

Databaser & SQL

6 svar · 2 205 visningar · startad av noratx

Medlem sedan feb. 200193 inlägg
Frågan#1

Hej!

Jag har försökt ett tag nu att leta reda på info om hur man gör detta, men ännu inte kunnat hitta något som hjälpt mig. (Har hittat massor av exempel, men inget som hjälpt mig något vidare.)

Hoppas därför på lite hjälp av någon som kan tala om för mig hur jag i mitt php script skall kunna få ut den datan jag vill ha ut.
(Ok, jag vet att detta är SQL forumet och inte PHP. Har dock på känn att denna frågan är med lämpad för SQL forumet, men moderator(er) är givetvis välkommna att flytta tråden till lämpligare plats).

Jag har i min databas följande tabeller (de som jag vill plocka data ur), finns fler..

-- Struktur för tabell `cc_plans`
--

CREATE TABLE IF NOT EXISTS `cc_plans` (
  `id` int(11) NOT NULL auto_increment,
  `type` varchar(100) NOT NULL,
  `name` varchar(100) NOT NULL,
  `slots` varchar(11) NOT NULL default '0',
  `bitrate` int(11) NOT NULL default '24',
  `bandwidth` int(11) NOT NULL default '0',
  `accounts` varchar(100) NOT NULL,
  `proxy` varchar(100) NOT NULL default 'Disabled',
  `transfer` varchar(11) NOT NULL default '0',
  `destip` varchar(103) NOT NULL default 'default',
  `portbase_start` varchar(7) NOT NULL default 'default',
  `disable_expiry_on_creation` int(5) NOT NULL default '0',
  `allow_bandwidth_payments` int(5) NOT NULL default '1',
  `bandwidth_cost_per_gigabyte` varchar(100) NOT NULL default 'calculation',
  `sc_trans_enabled` varchar(100) NOT NULL default '0',
  `trans_upload_limit` varchar(100) NOT NULL default '30',
  `cost` varchar(100) NOT NULL default '0',
  `custom_link` text NOT NULL,
  `display` int(5) NOT NULL default '2',
  `valid` int(11) NOT NULL default '1',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=52 ;

och

-- Struktur för tabell `cc_servers`
--

CREATE TABLE IF NOT EXISTS `cc_servers` (
  `id` int(11) NOT NULL auto_increment,
  `system_id` int(25) NOT NULL default '1',
  `reseller` varchar(100) NOT NULL default 'none',
  `owner` varchar(100) NOT NULL,
  `plan` varchar(100) NOT NULL default 'none',
  `maxuser` varchar(100) NOT NULL,
  `portbase` int(11) NOT NULL default '0',
  `bitrate` varchar(100) NOT NULL,
  `adminpassword` varchar(100) NOT NULL,
  `adminpassword_saved` varchar(150) default NULL,
  `password` varchar(100) NOT NULL,
  `sitepublic` varchar(100) NOT NULL default '1',
  `logfile` varchar(100) NOT NULL default 'logs/log_{port}.log',
  `realtime` varchar(100) NOT NULL default '1',
  `screenlog` varchar(100) NOT NULL default '0',
  `showlastsongs` varchar(100) NOT NULL default '10',
  `tchlog` varchar(100) NOT NULL default 'Yes',
  `weblog` varchar(100) NOT NULL default 'No',
  `w3cenable` varchar(100) NOT NULL default 'Yes',
  `w3clog` varchar(100) NOT NULL default 'logs/w3c_{port}.log',
  `srcip` varchar(100) NOT NULL default 'ANY',
  `destip` varchar(100) NOT NULL default 'ANY',
  `yport` varchar(100) NOT NULL default '80',
  `namelookups` varchar(100) NOT NULL default '0',
  `relayport` varchar(100) NOT NULL default '0',
  `relayserver` varchar(100) NOT NULL default 'empty',
  `autodumpusers` varchar(100) NOT NULL default '0',
  `autodumpsourcetime` varchar(100) NOT NULL default '30',
  `contentdir` varchar(100) NOT NULL,
  `introfile` varchar(100) NOT NULL,
  `titleformat` varchar(100) NOT NULL,
  `publicserver` varchar(100) NOT NULL default 'default',
  `allowrelay` varchar(100) NOT NULL default 'Yes',
  `allowpublicrelay` varchar(100) NOT NULL default 'Yes',
  `listenertimer` varchar(100) NOT NULL default 'undefined',
  `backupfile` varchar(100) NOT NULL,
  `ripfile` varchar(250) NOT NULL default 'none',
  `banfile` varchar(250) NOT NULL default 'none',
  `metainterval` varchar(100) NOT NULL default '8192',
  `riponly` varchar(100) NOT NULL default 'No',
  `suspended` text NOT NULL,
  `abuse` int(11) NOT NULL default '0',
  `publicname` varchar(130) NOT NULL default 'none',
  `played_mailing` int(1) NOT NULL default '0',
  `messengercontrol` varchar(8) NOT NULL default 'disabled',
  `streamauth` enum('disabled','enabled') NOT NULL default 'disabled',
  `proxy` varchar(8) NOT NULL default 'Disabled',
  `bandwidth` varchar(130) NOT NULL default 'none',
  `expire` varchar(100) NOT NULL default '0',
  `cost_per_month` varchar(100) NOT NULL default 'plancost',
  `notified` int(1) NOT NULL default '0',
  `autodj` varchar(100) NOT NULL default 'disabled',
  `autodj_serverip` varchar(100) NOT NULL default 'default',
  `autodj_port` varchar(7) NOT NULL default 'default',
  `autodj_password` varchar(100) NOT NULL default 'default',
  `autodj_bitrate` int(3) NOT NULL default '64',
  `autodj_quality` varchar(15) NOT NULL default 'auto',
  `autodj_upload` int(255) NOT NULL default '35',
  `autodj_channels` int(1) NOT NULL default '0',
  `lastplaylist` varchar(15) NOT NULL default '',
  `autodj_crossfade` int(6) NOT NULL default '1',
  `autodj_crossFLen` int(6) NOT NULL default '8000',
  `autodj_irc` varchar(160) NOT NULL default 'N/A',
  `autodj_icq` varchar(100) NOT NULL default 'N/A',
  `autodj_aim` varchar(100) NOT NULL default 'N/A',
  `trans_title` varchar(100) default NULL,
  `trans_url` varchar(250) default NULL,
  `trans_genre` varchar(20) default NULL,
  `trans_shuffle` tinyint(1) NOT NULL default '0',
  `laststream` int(20) NOT NULL default '0',
  `commitchanges` int(11) NOT NULL default '0',
  `transpid` int(100) default NULL,
  `pid` varchar(100) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;

Det jag vill uppnå, är via länken getinfo.php?username=Nisse, ställa frågan:

"Vad har användaren 'Nisse' för info" och vill då att följande händer:

Kolla i tabellen: cc_servers om användaren 'Nisse' finns där, Om så är fallet, vad har användaren 'Nisse' för plan nummer, portbase of bitrate.
(I detta exempel har 'Nisse' Plan nummer 40, portbase 12345 och Bitrate 128)
Kolla där efter i tabellen cc_plans om något matchar plan nummer 40 som vi fick från cc_servers.

I cc_plans har ett av ID fälten numret 40.
Kolla då vad som är ifyllt i fältet "Name" och "Cost".
(I detta fallet är Name="50_96_NADJ" och Cost="450"

Tillsist så presenterar scriptet fäljande data i en HTML output
"Användaren 'Nisse' använder planen '50_96_NADJ' som kostar '450'. Porten är '12345' och bitrate är satt till '128'."

Jag lyckas bara inte få till det.. :/

Vore hemskt tacksam för hjälp.

Medlem sedan sep. 2006867 inlägg
#2

Jag är inte så bra på PHP, men om du har MySQL borde din fråga se ut såhär i alla fall:

SELECT ccp.Name, ccp.Cost, ccs.portbase, ccs.bitrate 
FROM cc_plans AS ccp JOIN cc_servers AS ccs ON ccp.ID = ccs.plan 
WHERE ccs.owner = 'Nisse'

Jag antog här att 'plan nummer' är plan och att 'användare' är owner, inte reseller... Men det är ju bara att ändra :)

Medlem sedan feb. 200193 inlägg
#3

Har ytterligare en fråga angående detta nu ett tag senare.
Har försökt att modifiera SQL frågan men utan resultat.

Denna gången är det 3 tabeiler involverade, de två övre, pllus denna:

-- 
-- Struktur för tabell `cc_users`
-- 

CREATE TABLE `cc_users` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(255) NOT NULL,
  `hash` varchar(100) NOT NULL,
  `user_level` int(11) NOT NULL default '0',
  `user_email` varchar(200) NOT NULL,
  `contact_number` varchar(25) NOT NULL,
  `mobile_number` varchar(25) NOT NULL,
  `account_notes` text NOT NULL,
  `name` varchar(50) NOT NULL,
  `surname` varchar(50) NOT NULL,
  `address` text NOT NULL,
  `country` varchar(255) NOT NULL,
  `state` varchar(30) NOT NULL,
  `postalcode` int(10) NOT NULL,
  `timezone` varchar(250) NOT NULL default 'default',
  `age` varchar(100) NOT NULL,
  `theme` varchar(100) NOT NULL default 'none',
  `language` varchar(100) NOT NULL,
  `lastvisit` varchar(100) NOT NULL,
  `currentip` varchar(250) NOT NULL,
  `lastip` varchar(200) NOT NULL,
  `last_forget` int(11) NOT NULL default '0',
  `credits` varchar(100) NOT NULL default '0',
  `activated` varchar(100) NOT NULL default '1',
  `token` varchar(250) NOT NULL default '',
  `reseller_plan` varchar(100) NOT NULL default 'none',
  `reseller_plan_expire` int(11) NOT NULL default '0',
  `reseller` varchar(100) NOT NULL default 'none',
  `ftp_password` varchar(255) NOT NULL,
  `gaiastreams_uuid` varchar(250) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=60 ;

-- 
-- Data i tabell `cc_users`
-- 

INSERT INTO `cc_users` (`id`, `username`, `hash`, `user_level`, `user_email`, `contact_number`, `mobile_number`, `account_notes`, `name`, `surname`, `address`, `country`, `state`, `postalcode`, `timezone`, `age`, `theme`, `language`, `lastvisit`, `currentip`, `lastip`, `last_forget`, `credits`, `activated`, `token`, `reseller_plan`, `reseller_plan_expire`, `reseller`, `ftp_password`, `gaiastreams_uuid`) VALUES 
(1, 'noratx', 'a6ace2c130ae5801be710eb19543a2b0df0c4513', 2, '', 'N/A', 'N/A', 'N/A', 'Administrator', 'N/A', '', '', '', 0, 'default', 'N/A', 'none', 'default', '1253853690', '94.255.xxx.xxx', '94.255.xxx.xxx', 0, '0', '1', '', 'none', 0, 'none', '', '05c9fe42-8d89-401d-a9a5-2d82af58e16f');

Jag behöver fråga databasen efter mitt UUID (gaiastreams_uuid, '05c9fe42-8d89-401d-a9a5-2d82af58e16f'). Jag vill då få ut följande svar:

gaiastreams_uuid = '05c9fe42-8d89-401d-a9a5-2d82af58e16f' (cc_users.gaiastreams_uuid)
COST = "kostaden" (cc_plans.Cost)
portbase = "portbase" (cc_servers.portbase)

I efterhand kom jag just på att jag behöver kunna ställa frågan på två olika sätt, det övre, och att fråga efter portbase (cc_servers.portbase, '8002') och då få ut samma svar som ovan.

Men jag är dessvärre inte tillräckligt bra på mysql för att kunna snida till den tidigare join-frågan för att få ut det svar jag vill ha.
Vore mycket tacksam om någon kunde tala om för mig vad jag skall fråga databasen.

Tack på förhand!
/Rickard

Medlem sedan feb. 200193 inlägg
#4

Ingen alls? :(

Medlem sedan dec. 200012 464 inlägg
#5

Vilken kolumn i cc_users är relaterad till någon kolumn i någon av de andra tabellerna?

Medlem sedan feb. 200193 inlägg
#6

Nu ska vi se om jag får det hela rätt...Det är nämligen här jag brister.. fattar mig inte på detta med relationer...

Men....

cc_users.username => cc_servers.owner
cc_servers.plan => cc_plan.id

cc_users har inga relatiner med cc_plan och vice versa.

Det jag behöver är att fråga cc_servers efter portbase, och därigenom få ut:

cc_users.credits
cc_server.portbase
cc_plan.cost

cc_server.portbase får jag ju förvisso ut ifrån frågan jag ställer via $_GET

Medlem sedan dec. 200012 464 inlägg
#7
select ccp.Name, 
       ccp.Cost, 
       ccs.portbase, 
       ccs.bitrate,
       ccu.gaiastreams_uuid
  from cc_plans as ccp 
  join cc_servers as ccs 
    on ccp.ID = ccs.plan 
  join cc_users as ccu
    on ccs.owner = ccu.usermame
 where ccs.owner = 'Nisse'

select ccp.Name, 
       ccp.Cost, 
       ccs.owner, 
       ccs.bitrate,
       ccu.gaiastreams_uuid
  from cc_plans as ccp 
  join cc_servers as ccs 
    on ccp.ID = ccs.plan 
  join cc_users as ccu
    on ccs.owner = ccu.usermame
 where ccs.portbase = 8002
274 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)