[PHP] mysqli_query geeft twee keer hetzelfde resultaat

Pagina: 1
Acties:

Onderwerpen


  • ZalmanLuci
  • Registratie: Juli 2006
  • Laatst online: 17-02 17:22
Hallo allen,

Ik heb een sortable list d.m.v. JQuery-ui. Wanneer de posities zijn veranderd van de lijst, moeten er op de achtergrond ook dingen worden veranderd in de database. (Aangezien aan de lijst weer kleuren zitten en deze moeten worden laten zien op dezelfde manier als hoe de lijst is gesorteerd.)

Zodra er wat is veranderd in de lijst, dan wordt er een AJAX request gedaan. In de php file verander ik de posities, zoals ik die krijg en sla dit op in de database. Vervolgens moeten de kleuren, welke in een andere tabel staan, ook gesorteerd worden aan de hand van de lijst. (Kleuren worden zo opgeslagen; rood,groen,geel,etc (Comma seperated dus.) Dit gaat allemaal prima.

Vervolgens moet ik dit updaten in de database en daar gaat het nu juist fout. Het volgende stuk code gaat het fout;
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            $y = 0;
            $new_array = array();
            foreach ($status_colors as $values) {
                //Herorder de posites met de bijbehorende kleuren.
                for ($i = 0; $i < count($positions); $i++) {
                    $new_array[$positions[$i]] = $values[$i];
                }
                //Sorteren op key
                ksort($new_array);
                
                $update_reorder_status_color = 'UPDATE colors SET color="'. mysqli_real_escape_string($link, implode(',', $new_array)) .'" WHERE building_id="'. mysqli_real_escape_string($link, $vestiging_ids[$y]) .'"';
                //Hier gaat het fout
                mysqli_query($link, $update_reorder_status_color)or die(mysqli_error($link));
                $y++;
            }


$new_status_color geeft in dit geval de juiste volgorde mee van de kleuren. Maar, zodra ik mysqli_query() of mysql_query() gebruik, geeft het mij dezelfde query weer terug.

Een voorbeeld van wat er gebeurt wanneer ik mysqli_query() gebruik.
Een lijst met kleuren er achter;
  • Item 1 - Groen
  • Item 2 - Zwart
  • Item 3 - Rood
Nu sorteer ik de lijst anders:
  • Item 3 - Rood
  • Item 1 - Groen
  • Item 2 - Zwart
Tot hier gaat het goed. Maar, wanneer ik de lijst opnieuw sorteer als de eerste lijst (Item 1, Item 2, Item 3) krijg ik precies hetzelfde resultaat terug als van wanneer ik de lijst sorteerde naar Item 3, Item 1, Item 2.

Zodra ik mysqli_query() weg haal, krijg ik continu de juiste resultaten terug, maar zodra ik dus mysqli_query() gebruik gaat het fout.

Meerdere dingen geprobeerd;
  • Cache, maar dit mocht niet baten.
  • Debuggen van queries, geen fouten kwamen terug.
  • Het updaten naar de database toe uit de loop gehaald, mocht niet baten.
Heeft iemand enig idee waarom dit gebeurd?

Verwijderd

ZalmanLuci schreef op zondag 26 augustus 2012 @ 22:36:
Kleuren worden zo opgeslagen; rood,groen,geel,etc (Comma seperated dus.) Dit gaat allemaal prima.
Nee, dat gaat niet prima. Naar de rest van het probleem ga ik niet eens kijken. Eerst zorgen dat je database goed genormaliseerd is. Comma separated values in een database is not done.
Als de volgorde van kleuren belangrijk is, maak je er maar een tabel voor aan met daarin een kolom voor de volgorde.

  • ID-College
  • Registratie: November 2003
  • Laatst online: 16:56
Wat is je doel om dit op te slaan in de database, want dat ontgaat mij even?

  • ZalmanLuci
  • Registratie: Juli 2006
  • Laatst online: 17-02 17:22
Verwijderd schreef op zondag 26 augustus 2012 @ 22:44:
[...]

Nee, dat gaat niet prima. Naar de rest van het probleem ga ik niet eens kijken. Eerst zorgen dat je database goed genormaliseerd is. Comma separated values in een database is not done.
Als de volgorde van kleuren belangrijk is, maak je er maar een tabel voor aan met daarin een kolom voor de volgorde.
Ik kan niet anders. Aangezien er wel 50 verschillende kleuren in kunnen staan of 1000, kan ik niet anders dan comma seperated values in de database zetten. Met andere woorden de hoeveelheid kleuren is compleet variabel.
ID-College schreef op zondag 26 augustus 2012 @ 22:52:
Wat is je doel om dit op te slaan in de database, want dat ontgaat mij even?
Aangezien ik de kleuren ook op de juiste volgorde moet laten zien, moet ik de kleuren aan de hand van de nieuwe posities weer opslaan.

[ Voor 20% gewijzigd door ZalmanLuci op 26-08-2012 22:54 ]


Verwijderd

ZalmanLuci schreef op zondag 26 augustus 2012 @ 22:52:

Ik kan niet anders. Aangezien er wel 50 verschillende kleuren in kunnen staan of 1000, kan ik niet anders dan comma seperated values in de database zetten. Met andere woorden de hoeveelheid kleuren is compleet variabel.
En dus heb je een databasetabel met kleuren nodig, en waarschijnlijk een koppeltabel tussen dingen en kleuren.
Zorg even dat je voldoende kennis hebt van databases en normalisatie voor je gaat roepen dat iets niet kan.

  • ZalmanLuci
  • Registratie: Juli 2006
  • Laatst online: 17-02 17:22
Verwijderd schreef op zondag 26 augustus 2012 @ 22:54:
[...]

En dus heb je een databasetabel met kleuren nodig, en waarschijnlijk een koppeltabel tussen dingen en kleuren.
Zorg even dat je voldoende kennis hebt van databases en normalisatie voor je gaat roepen dat iets niet kan.
Excuus, je hebt inderdaad gelijk.

Alleen zit ik met een probleem als ik dit zou doen, stel ik doe dit;
Kleuren - tabel
kleur_id - kleur

Aangezien ik altijd maar 3 kleuren heb zal het worden;
1 - Groen
2 - Geel
3 - Rood

Een vestiging kan in dit geval meerdere kleuren hebben (dit ligt weer aan hoeveel legendapunten er zijn, welke in een aparte tabel staan.) Vervolgens als ik dan verder ga, lijkt het er op dat ik duplicated data krijg in mijn tabel;
Koppeltabel - tabel
Vestiging_id - kleur_id

Maar stel er zijn 10 legendapunten en deze staan allemaal op rood, krijg ik dit;
1 - 3
1 - 3
Keer 10

Ondertussen ben ik bezig met het doorlezen van normalisatie, alleen begrijp ik niet helemaal hoe ik dit zou moeten doen.

Verwijderd

Je vindt de volgorde belangrijk, introduceer daar dan ruimte voor in je model.

Vestigingkleuren:
vestiging_id, kleur_id, volgorde (oplopend)

De combinatie (vestiging_id, volgorde) moet uniek zijn zodat je geen ambiguïteit hebt, en de combinatie (vestiging_id, kleur_id) de primary key.
Vrij eenvoudig, eigenlijk.

[ Voor 3% gewijzigd door Verwijderd op 26-08-2012 23:16 ]

Pagina: 1