Wegschrijven van tabel in PHP (liefst codeigniter)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jennifer Van W

Jennifer Van W

18/11/2014 09:02:51
Quote Anchor link
Hi, bij een bepaalde query krijg ik de volgende tabel:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
room_id     type     images     title     body     service_name     
1     Deluxe     room-01a.jpg     Double Room     Content room    Wifi
1     Deluxe     room-01b.jpg     Double Room     Content room    Wifi
1     Deluxe     room-01a.jpg     Double Room     Content room    Flatscreen
1     Deluxe     room-01b.jpg     Double Room     Content room    Flatscreen
1     Deluxe     room-01a.jpg     Double Room     Content room    Parking
1     Deluxe     room-01b.jpg     Double Room     Content room    Parking
1     Deluxe     room-01a.jpg     Double Room     Content room    Roomservice
1     Deluxe     room-01b.jpg     Double Room     Content room    Roomservice


De volledige uitkomst gaat over room_id=1, maar doordat de room 2 afbeeldingen heeft en 4 verschillende services beidt heb ik een tabel met 8 regels.

Hoe kan ik deze uitlezen daar ik nu geen enkele regel heb voor deze room.

wordt dat een lus in een lus?? Wie kan me helpen, ik heb enkel ervaring met tabellen waarbij er maar 1 regel zou zijn, maar dat zien jullie ook wel ;-)
 
PHP hulp

PHP hulp

22/12/2024 23:38:39
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/11/2014 09:49:04
Quote Anchor link
Ja, de keus is altijd of meerdere queries of binnen PHP uitrafelen. Probeer eens:

$result is een array van alle rijen uit de database.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$arr
= [];

foreach($result as $row) {
    foreach($row as $col => $field) {
        $arr[$col][$field] = $field;
    }
}

echo '<pre>';
print_r($arr);
echo '</pre>';
?>


Toevoeging op 18/11/2014 10:06:39:

Of zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$arr
= [];

// verkrijg de kolomnamen in een array
$keys = array_keys($result[0]);

// loop door de kolommen
foreach($keys as $key)
{

    //pak van alle records de kolom waarde en zet die in een array, vervolgens verwijder dubbele waardes
    $arr[$key] = array_unique(array_column($result, $key));
}

echo '<pre>';
print_r($arr);
echo '</pre>';
?>
 
Jennifer Van W

Jennifer Van W

18/11/2014 10:15:13
Quote Anchor link
Dank je Frank ik ga het gelijk proberen...

Toevoeging op 18/11/2014 10:29:18:

Hi Frank die eerste is voor mij het beste:

uitkomst:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
Array
(
    [room_id] => Array
        (
            [1] => 1
        )

    [type] => Array
        (
            [Deluxe] => Deluxe
        )

    [image_name] => Array
        (
            [room-01a.jpg] => room-01a.jpg
            [room-01b.jpg] => room-01b.jpg
        )

    [title] => Array
        (
            [Double Room] => Double Room
        )

    [body] => Array
        (
            [Content room] => Content room
        )

    [service_name] => Array
        (
            [Wifi] => Wifi
            [Flatscreen] => Flatscreen
            [Parking] => Parking
            [Roomservice] => Roomservice
        )

)
 

04/12/2014 09:57:05
Quote Anchor link
Codeigniter altijd +1
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

04/12/2014 10:40:22
Quote Anchor link
Frank Nietbelangrijk op 18/11/2014 09:49:04:
Ja, de keus is altijd of meerdere queries .......

Niet noodzakelijk:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$sql
= 'SELECT
    r.room_id,
    r.room_name,
    GROUP_CONCAT(i.image_name) image_list
    GROUP_CONCAT(s.service_name) service_list
FROM
    rooms r
JOIN
    images i
    USING (room_id)
JOIN
    services s
    USING (room_id)
GROUP BY
    r.room_id'
;
$result = $this->db->query($sql)->result();
foreach ($result as $key => $room) {
    $result[$key]->image_list = explode(',', $room->image_list);
    $result[$key]->service_list = explode(',', $room->service_list);
}
[
/code]
 
Jennifer Van W

Jennifer Van W

04/12/2014 10:45:32
Quote Anchor link
Hi Ger,

Ik had die van Frank gebruikt en die werkt goed, maar wat jij daar plaatst ziet er indrukwekkend uit. Ga dit zeker gebruiken.

Bedankt!
 

05/12/2014 13:55:07
Quote Anchor link
@jennifer Waarom gebruik je in CodeIgniter geen querybuilder (active-record)
Je kan op deze manier gemakkelijker een query bouwen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$this
->db->get_where('rooms', array('id' => 1));
$this->db->join('images', 'images.id = room.id');
$result = $this->db->get();
?>
 
Jennifer Van W

Jennifer Van W

05/12/2014 14:02:00
Quote Anchor link
Hi Rickert, heel erg bedankt voor je reactie. Ik ben op de hoogte van de active-record binnen CI, maar heb (eenvoudige) queries op deze manier leren maken. Voor mij is het handiger omdat ik niet alleen met CI werk.
 

05/12/2014 14:14:54
Quote Anchor link
Jennifer Van W op 05/12/2014 14:02:00:
Hi Rickert, heel erg bedankt voor je reactie. Ik ben op de hoogte van de active-record binnen CI, maar heb (eenvoudige) queries op deze manier leren maken. Voor mij is het handiger omdat ik niet alleen met CI werk.


Aha kijk dat veranderd de zaak. Bij Active Record worden alle waardes namelijk ook meteen "ge-escaped", mysql_injection.
Ik denk dat iedereen ze queries zelf leert schrijven en dat is zeker een goede manier om het te leren.

Mocht er binnen een framework zijn om het anders dan handmatig te doen zou ik het zeer aanraden. Het is niet voor niets ontwikkeld.

Belangrijkste voor nu is.. dat het gewoon werkt en dat je het begrijpt, toch?
Voor andere CI gerelateerde vragen kan je ze stellen, ik werk er al meer als 2 jaar mee en hier op PHPhulp hebben ze er niet veel kennis van. Heb zelf ook weleens een vraag gesteld en toen konden ze me ook helaas niet helpen.

Success verder met ontwikkelen.
 
Jennifer Van W

Jennifer Van W

05/12/2014 14:22:52
Quote Anchor link
Ik heb de query van Ger gebruikt en deze werkt perfect.

Voor overige knoop ik het goed in mijn "order" ;-) fijn weekend

Toevoeging op 05/12/2014 14:23:11:

Ehh Oren
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/12/2014 18:36:54
Quote Anchor link
Rickert Bombaklats op 05/12/2014 13:55:07:
@jennifer Waarom gebruik je in CodeIgniter geen querybuilder (active-record)
Je kan op deze manier gemakkelijker een query bouwen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$this
->db->get_where('rooms', array('id' => 1));
$this->db->join('images', 'images.id = room.id');
$result = $this->db->get();
?>

Het is maar wat je makkelijk vind, je voert nu 2 queries uit ....

Ik gebruik Active Record niet of nauwelijks, ik vind het te omslachtig en heb een vrij aardige querybuilder in mijn hoofd zitten ;-)
 

05/12/2014 23:36:23
Quote Anchor link
@ger Het was een voorbeeld. Querybuilders zijn er om je het makkelijker te maken. Je hoeft natuurlijk niets, daar ben je vrij in.
Sommige queries zijn ook bijna niet te doen in een query builder.

ORM's zoals Doctrine doen hetzelfde, die maken de queries aan de hand van jou opgegeven object.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

06/12/2014 09:43:13
Quote Anchor link
Ik vind het ook een perfect voorbeeld ......

Van hoe snel je met een querybuilder de mist in kan gaan.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.