Wegschrijven van tabel in PHP (liefst codeigniter)
Code (php)
1
2
3
4
5
6
7
8
9
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
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 ;-)
$result is een array van alle rijen uit de database.
Code (php)
Toevoeging op 18/11/2014 10:06:39:
Of zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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>';
?>
$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>';
?>
Toevoeging op 18/11/2014 10:29:18:
Hi Frank die eerste is voor mij het beste:
uitkomst:
Code (php)
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
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
)
)
(
[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
)
)
Codeigniter altijd +1
Frank Nietbelangrijk op 18/11/2014 09:49:04:
Ja, de keus is altijd of meerdere queries .......
Niet noodzakelijk:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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]
$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]
Ik had die van Frank gebruikt en die werkt goed, maar wat jij daar plaatst ziet er indrukwekkend uit. Ga dit zeker gebruiken.
Bedankt!
Je kan op deze manier gemakkelijker een query bouwen.
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.
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.
Voor overige knoop ik het goed in mijn "order" ;-) fijn weekend
Toevoeging op 05/12/2014 14:23:11:
Ehh Oren
Rickert Bombaklats op 05/12/2014 13:55:07:
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 ;-)
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.
Van hoe snel je met een querybuilder de mist in kan gaan.