[PHP] array vergelijken met kolom waarden.

Pagina: 1
Acties:
  • 124 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MAD_Sofia
  • Registratie: Oktober 2004
  • Laatst online: 10-09 11:02
Hoi,

ik ben op mijn stage druk doende met het ontikkelen van waterbank.nl. Inmiddels ben ik bij het ict gedeelte aangekomen wat op zich erg goed gaat, maar ik zit vast op één punt. Ik kan echt nergens op internet een goed antwoord vinden, dus misschien dat jullie is naar mijn code zouden willen kijken?

Ik heb een array gemaakt opgeslagen in $Postcode_array. deze ziet er als volgt uit.

code:
1
2
3
4
5
6
7
8
9
10
11
12
//matchende poscode in een array zetter
$sql6 ="SELECT ID_link, Postcode FROM gebied_link WHERE ID_peil='$ID_peil_x' ;";
$result6 = mysql_query($sql6) or die (mysql_error());
while($row = mysql_fetch_assoc($result6)) 
{
    $my_array[] = $row['Postcode'];
}

foreach($my_array as $Postcode_array) 
{
        //echo $Postcode_array . '<br />';
}


Vervolgens heb ik een selectie uit een tabel waar de Postcodes alleen mogen voldoen aan postcodes welke in de $Postcode_array zitten. Helaas worden hier geen rijen gevonden, dus hier wordt de array niet op een goede manier uitgelezen, weet één van jullie hoe dit wel moet?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//checker of mensen wateraanbieden /vragen of niet.
echo($StatusRuimte);
// Hier is water in de aanbieding
if ($StatusRuimte==2)
{   
    echo "ik ben statusruimte2";

    $sql7 = "SELECT * FROM account_sub WHERE Postcode='$Postcode_array' AND Geplaatst='1' AND ID_prime!='$ID_prime';";
    
    $result7 = mysql_query($sql7) or die (mysql_error());
    //while (list($ID_sub_x) = mysql_fetch_row($result7))
    //{ 
        if (mysql_num_rows($result7) >=1) 
        { 
            echo ("gefeliciteerd voor u is er water in de aanbieding");
            //exit;
        }
        else 
        {
            echo ("op dit moment is er voor u geen water in de aanbieding, maar u kunt alsnog een aanvraag plaatsen.");
            //exit;
        }
    //}
}
// hier is water nodig
else if ($StatusRuimte==1)
{   
    echo "ik ben statusruimte1";
    
    $sql7 = "SELECT * FROM account_sub WHERE Postcode='$Postcode_array ' AND Geplaatst='2' AND ID_prime!='$ID_prime';";
    $result7 = mysql_query($sql7) or die (mysql_error());
    //while (list($ID_sub_x) = mysql_fetch_row($result7))
    //{ 
        if (mysql_num_rows($result7) >0) 
        { 
            echo ("gefeliciteerd u kunt nu water aanbieden, want er is vraag naar");
            //exit;
        }
        else 
        {
            echo ("op dit moment is er helaas geen vraag naar water, maar u kunt desgewenst wel een aanbieding plaatsen.");
            //exit;
        }
    
    
    //}
}
else
{   echo ($StatusRuimte);
    echo ("waar is de statusruimte?");
    
}
            
//einde aanbieding/aanvraag checker

Andromeda is near


Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
Waarom voer je die controle niet in je query uit?

SQL:
1
2
3
4
5
6
SELECT ID_link, Postcode 
FROM gebied_link, account_sub 
WHERE ID_peil='$ID_peil_x'
AND gebied_link.Postcode = account_sub.Postcode
AND Geplaatst='1' 
AND ID_prime!='$ID_prime'


Zoiets lijkt me te doen wat je wilt ..

[ Voor 6% gewijzigd door PhoeniX- op 14-12-2005 14:27 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Vanuit je query lijkt me sowieso beter, en anders kun je altijd nog zoiets doen:
SQL:
1
2
3
SELECT *
FROM tabel
WHERE postcode IN (' . implode(',', $jouwarray) . ')

Waarbij die implode-functie uiteraard in PHP zit. Maar nogmaals, een simpele join-query zoals PhoeniX- aandraagt is veel performanter en compacter. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MAD_Sofia
  • Registratie: Oktober 2004
  • Laatst online: 10-09 11:02
ok ik heb geprobeerd wat phoenix zij, maar ik krijg de volgende foutmelding

statusruimte2Column: 'Postcode' in field list is ambiguous

volgens mij betekend ambiguous dubbelzinnig. Heeft hij er moeite mee dat de kolomnamen identiek zijn?

Andromeda is near


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
MAD_Sofia schreef op woensdag 14 december 2005 @ 14:57:
ok ik heb geprobeerd wat phoenix zij, maar ik krijg de volgende foutmelding

statusruimte2Column: 'Postcode' in field list is ambiguous

volgens mij betekend ambiguous dubbelzinnig. Heeft hij er moeite mee dat de kolomnamen identiek zijn?
Ja

tabelnaam.column lost dit op, dan weet je DB weer welke kolom je precies bedoelt :)

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 27-04 11:53
Als je de kolomnamen uniek zou maken per tabel, door voor elke naam een tabel prefix te plaatsen (bv acc_postcode en gbd_postcode) bespaart dat je dit soort errors en is het overzichtelijker werken met je query resultaten.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

mosymuis schreef op woensdag 14 december 2005 @ 15:46:
Als je de kolomnamen uniek zou maken per tabel, door voor elke naam een tabel prefix te plaatsen (bv acc_postcode en gbd_postcode) bespaart dat je dit soort errors en is het overzichtelijker werken met je query resultaten.
8)7 ja das echt een stuk overzichtelijker dan gewoon alias'en of table references gebruiken in je query...

[ Voor 29% gewijzigd door Bosmonster op 14-12-2005 15:52 . Reden: subtiliteit verwijderd ]


Acties:
  • 0 Henk 'm!

  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 27-04 11:53
Bosmonster schreef op woensdag 14 december 2005 @ 15:50:
En mag je vervolgens overal prefixes voor bedenken, die je moet documenteren en van je tabel-logica een puinhoop maken. Daar heb je aliases voor in je query's, bespaart je dit soort problemen en maakt het werken met je query een stuk overzichtelijker...
Een prefix is bij mij een afkorting van de tabel zelf, en mijn eigen ervaring met deze aanpak in verschillende projecten is tot nu toe enkel nog maar positief. Het zal dus persoonlijk zijn, of afhankelijk van de schaal van je project.

[ Voor 46% gewijzigd door mosymuis op 14-12-2005 15:53 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

mosymuis schreef op woensdag 14 december 2005 @ 15:53:
Een prefix is bij mij een afkorting van de tabel zelf, en mijn eigen ervaring met deze aanpak in verschillende projecten is tot nu toe enkel nog maar positief. Het zal dus persoonlijk zijn, of afhankelijk van de schaal van je project.
Mijn ervaring met dit soort praktijken van anderen is alleen nog maar negatief. Misschien als je ze zelf verzint is het handig en je ze kunt onthouden. Voor anderen die ze continue op moeten zoeken (als je het al gedocumenteerd hebt) is het een stuk minder plezierig werken.

Dus ja, het is inderdaad afhankelijk van de persoon en schaal van het project. Werk je alleen aan kleine projecten is het leuk, werk je met meerdere personen aan grotere projecten dan horen afkortingen niet thuis in tabel en veldnamen.

Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
MAD_Sofia schreef op woensdag 14 december 2005 @ 14:57:
ok ik heb geprobeerd wat phoenix zij, maar ik krijg de volgende foutmelding

statusruimte2Column: 'Postcode' in field list is ambiguous

volgens mij betekend ambiguous dubbelzinnig. Heeft hij er moeite mee dat de kolomnamen identiek zijn?
Klopt, dat is het nadeel van even uit m'n hoofd wat typen :) Omdat in beide tabellen een postcode zit snapt mysql niet welke je nu bedoelt.

Bijvoorbeeld:
SQL:
1
2
3
4
5
6
SELECT g.ID_link, g.Postcode
FROM gebied_link g, account_sub a
WHERE g.ID_peil='$ID_peil_x'
AND g.Postcode = a.Postcode
AND a.Geplaatst='1' 
AND a.ID_prime!='$ID_prime'


Dit is trouwens wel basiskennis.

Acties:
  • 0 Henk 'm!

  • MAD_Sofia
  • Registratie: Oktober 2004
  • Laatst online: 10-09 11:02
haha thx!! tja het zal vast wel basiskennis zijn. maar in al die PHP referentie sites zie ik echt vaak door de bomen het bos niet meer. Zelf ben ik niet echt een die hard ict-er.

Andromeda is near


  • Mawlana
  • Registratie: Juli 2002
  • Laatst online: 19:37
MAD_Sofia schreef op woensdag 14 december 2005 @ 17:02:
haha thx!! tja het zal vast wel basiskennis zijn. maar in al die PHP referentie sites zie ik echt vaak door de bomen het bos niet meer. Zelf ben ik niet echt een die hard ict-er.
Dan heb je op de verkeerde plek gezocht. Waarom zou je voor info over een MySQL-query op bijv. php.net zoeken? Op mysql.com zoeken lijkt mij een stuk handiger. ;)
Pagina: 1