[PHP+MYSQL] select vanuit een opgeslagen array.

Pagina: 1
Acties:

Onderwerpen


  • rob3rt
  • Registratie: Maart 2009
  • Laatst online: 16-09 22:26
ik moet een select maken uit een array, de array is echter opgeslagen in de database via serialze.

tabel1 = server_lijst
tabel2 = server_updates

In tabel 1 staan alle gegevens van bepaalde type servers, de gegevens die ik nodig zijn zijn allemaal "tinyint(4)" waardes zoals"
os_type = '1' (of andere waarde), deze tabel komt overeen met specific_os
panel_type = '2' (of andere waarde), deze tabel komt overeen met specific_panel
server = '0' (of andere waarde), deze tabel komt overeen met specific_server

In tabel 2 staan oa 3 velden met arrays (via serialize toegevoegd) namelijk:
specific_os, specific_panel en specific_server
specific_server is bv: Array ( [0] => 1 [1] => 11 [2] => 4 )
Dit houd in dat ik servers (tabel1) met waardes 1,4 en 11 van tabel 1 wil hebben.

Nou wil ik dus een querie draaien op tabel2, bv:
PHP:
1
2
3
4
5
6
7
8
9
10
SELECT specific_os, specific_panel, specific_server FROM server_updates WHERE start_date <='".date("Y-m-d")."' AND end_date >= '".date("Y-m-d")."'
while(list($specific_os, $specific_panel, $specific_server)= mysql_fetch_row($sql)) { 
 
 //wat moet ik nou achter WHERE exact gebruiken?
 $sql = "SELECT ip, en_andere_gegevens, etc FROM server_lijst WHERE os_type='array_specific_os' AND panel_type='array_specific_panel' etc... ";
 $res = mysql_query($sql, $db1);    
 while(list($server_ip, $en_andere_gegevens, etc) = mysql_fetch_row($res)) {
   // dit zijn de server gegevens die ik wil
   }
}

Met deze querie haal ik alle beschikbare "updates" (want die staan in deze tabel) op tussen bepaalde datums, wat ik nu wil is dat ik alle "servers" krijg die een match hebben.

Ik heb al diverse queries geprobeerd maar ik krijg nooit het gewenste resultaat.
Hoe kan ik dit het beste aanpakken, hoe krijg ik een lijst van de servers die ik zoek vanuit de array?

Iemand tips?

[ Voor 13% gewijzigd door rob3rt op 11-02-2010 16:06 ]


  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
dit is te doen met een simpele join...
daarnaast heb je verschillende oplossing om door de serverlijst heen te gaan... via een php foreach of de IN() van mysql

[ Voor 61% gewijzigd door steffex op 11-02-2010 15:45 ]


  • Johnsel
  • Registratie: Februari 2004
  • Laatst online: 08-03 21:07
Eh, waarom heb je precies een array gekozen om je gegevens op te slaan?

Tevens is je naamgeving dermate vaag dat ik totaal geen idee heb wat je nu precies probeert te bereiken

  • rob3rt
  • Registratie: Maart 2009
  • Laatst online: 16-09 22:26
nope, krijg ook dat niet voor elkaar.
Het probleem is die opgeslagen array, zover ik begrepen heb kan mysql geen arrays lezen.
Eh, waarom heb je precies een array gekozen om je gegevens op te slaan?
Geen idee eigenlijk, toen ik dat aan het maken was leek me dat het meest eenvoudige, de waarden die in de array staan komen allemaal uit een multi select, alleen de gekozen opties moeten worden opgeslagen in de DB.
Maar ik kwam er later pas achter dat mysql niet met arrays kom omgaan als ik deze weer wilde gebruiken.

[ Voor 67% gewijzigd door rob3rt op 11-02-2010 15:50 ]


  • Johnsel
  • Registratie: Februari 2004
  • Laatst online: 08-03 21:07
Een array is in feite een tabel, je slaat nu dus een tabel op in een tabel. Ik zou eens nagaan hoe een database nou precies werkt, want dit is wel een heel aparte manier om gegevens op te slaan.

Die multi select moet je dus gaan terugvoeren naar individuele waarden, als in
(pseudocode)

foreach ($waarde in $multiselect)
{
insert into tabel
}

dan kun je later alle losse (in die multiselect) geselecteerde waarden weer ophalen

Overigens is dit sowieso een erg vaag topic, je bedoelingen zijn absoluut niet duidelijk.

Waar komen de gegevens vandaan? Wat wil je er mee doen? Wat wil je eruit krijgen?

[ Voor 55% gewijzigd door Johnsel op 11-02-2010 15:54 ]


  • rob3rt
  • Registratie: Maart 2009
  • Laatst online: 16-09 22:26
Ik heb de topic start aangepast en de querie er neer gezet die ik eigenlijk zoek... (die bestaat dus niet)

En dit multiselect **moet** in 1 tabel staan, dus niet elke waarde in aparte tabellen, vandaar de array keuze.

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Je probleem is een verkeerd database ontwerp. Je zult moeten normaliseren.

Anyone who gets in between me and my morning coffee should be insecure.


  • rob3rt
  • Registratie: Maart 2009
  • Laatst online: 16-09 22:26
Wat bedoel je daarmee, wat versta jij onder "normaliseren"?

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik denk dat hij hetzelfde bedoelt met normaliseren als Google en Wikipedia om maar 2 bronnen van informatie te noemen.

Verder raad ik je aan om gebruik te maken van mysql_fetch_assoc ipv. mysql_fetch_row, dan heb je al die list's niet nodig :)

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Cartman! schreef op donderdag 11 februari 2010 @ 16:25:
Ik denk dat hij hetzelfde bedoelt met normaliseren als Google en Wikipedia om maar 2 bronnen van informatie te noemen.
Bijvoorbeeld.

Anyone who gets in between me and my morning coffee should be insecure.

Pagina: 1