Code's vervangen woorden
Pagina: « vorige 1 2 3 volgende »
De puntkomma achter de join moet nu natuurlijk daar niet meer staan, maar na de limit.
Toevoeging op 09/12/2012 17:10:04:
Verdorie Erwin, ben je me al weer voor ;-)
Sorry Ger, ik zal het niet meer doen....
@Mathijs,
Ik lees in eerdere post dat je meerdere capcodes per melding kan hebben, staan er in de kolom brandweer.capcodes ook meerdere codes? Want in dat geval werkt de join niet.
Ja, ik had al zoon vermoede dat het niet werkte aangezien er niks veranderde ;). Wat is dan de handigste optie om het voor elkaar te krijgen? Is de SELECT-methode (één van de eerste reactie's) de enige??
Laat eens een voorbeeld zien van hoe het er dan echt uitziet, zo'n melding.
DB:
ID:
088
time:
2012-12-09 13:22:03
melding:
PRIO 1 : 645 .hoofd brandweerkazerne almere MARKER...
capcodes:
070001,0700160,0701101
soort:
OMS
disipline:
Brandweer
Rss:
feeds.livep2000.nl/?r=9&d=1
Als er meerdere codes worden gegeven (zoals in je voorbeeld), dan zou ik een linktabel maken. Je hebt dus een tabel met de codes, je hebt een tabel met de meldingen en per capcode die bij de melding wordt gegeven maak je een record aan in de linktabel doe de melding linkt met de capcode. Voor het voorbeeld krijg je dus 3 records in de linktabel.
Voor het ophalen heb je dan dus 2 joins nodig, in plaats van 1 zoals eerder gebruikt.
Toevoeging op 09/12/2012 18:31:01:
Oke, maar is het evt niet gewoon mogelijk dat de capcode word overschreven door de naam van de capcode uit de code tabel? Of is dat geen goed idee?
Ik zou dan een aparte tabel maken voor capcodes bij de meldingen.
Melding_capcodes
-melding_id
-capcode
met een PK op de beide kolommen
Je kan dan op deze manier dit terug in één string krijgen:
Oke, bedankt. Ik ga er mee aan de slag
Ik ben hier vandaag weer mee bezig gegaan. Nu vraag ik me alleen af, hoe weet ik het melding_id, want in de meldingen table word deze gezet door auto_increment.
LAST_INSERT_ID() is een mysql functie en kan je zoals bovenstaand gebruiken direct na het invoeren van een record. Je kan het ook in een volgende query gebruiken. Let alleen op dat je altijd alleen het laatste id kan ophalen. Zet je dus twee records achter elkaar in de database (met beide een auto increment) dan kan je daarna alleen het id van de tweede insert ophalen.
(en dit is connectie gebonden, als er gelijktijdig nog iemand bezig is dan heb je daar geen last van)
Ik heb het opslaan voor elkaar. Nu probeer ik de load voor elkaar te krijgen. Ik heb de table brandweer met de meldingen er in. En de table capcode_link met de id en de één capcode per row van de melding er in. De volgende query werkt niet.
Code (php)
En ik ben zelf nou niet echt thuis in de join's e.d. dus wie zou me kunnen helpen?
Toevoeging op 26/12/2012 14:03:49:
BTW: de desctiption van de capcode staat in de table capcodes met daarin capcode en description
Gewijzigd op 26/12/2012 14:04:22 door Matthijs Vos
Bedoel je hier dat je brandweer linkt, maar een alias geeft van 'capcode_link'?
De tabel capcode is op dit moment nog niet opgenomen. Dus ofwel je probeert de join te maken op de verkeerde tabel, ofwel de volgorde klopt niet.
Wat het wel moet zijn durf ik niet direct te zeggen, want ik begrijp niet helemaal welke tabel welke is en welke je nodig hebt.
brandweer
- id
- melding
- nog wat meer, maar dat is niet belangrijk
capcodes
-capcode
-description
capcode_link
-id (zelfde id als die in de brandweer table)
-capcode
Het is nu de bedoeling dat de melding uit brandweer word weergegeven. en dat de capcode uit capcode_link word vervangen (bij het weergeven) door de description die bij dezelfde capcode hoort in de table capcodes.
en dan moet ik die a zeker aanpassen in brandweer, b in capcode_link en c in capcodes??
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
b.id,
b.melding,
b.datum,
GROUP_CONCAT(c.description SEPARATOR ', ') AS capcodes
FROM
(SELECT id, melding, datum
FROM brandweer
ORDER BY datum DESC
LIMIT 15) AS b
JOIN
capcode_link AS cl
ON b.id = cl.id
JOIN
capcodes AS c
ON cl.capcode = c.capcode
GROUP BY b.id, b.melding
b.id,
b.melding,
b.datum,
GROUP_CONCAT(c.description SEPARATOR ', ') AS capcodes
FROM
(SELECT id, melding, datum
FROM brandweer
ORDER BY datum DESC
LIMIT 15) AS b
JOIN
capcode_link AS cl
ON b.id = cl.id
JOIN
capcodes AS c
ON cl.capcode = c.capcode
GROUP BY b.id, b.melding
Toevoeging op 26/12/2012 16:10:34:
Weer te laat ;-)
@Matthijs, a,b en c zijn aliasen zodat je niet elke keer de volledige tabelnamen voor de kolomnamen hoeft in te tikken
Gewijzigd op 26/12/2012 16:12:08 door Ger van Steenderen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
$gegevens = $mysqli->query('
SELECT
b.id,
b.melding,
b.datum,
GROUP_CONCAT(c.description SEPARATOR ', ') AS p2_capcodes
FROM
(SELECT id, melding, datum
FROM p2_brandweer
ORDER BY datum DESC
LIMIT 15) AS b
JOIN
p2_capcode_link AS cl
ON b.id = cl.id
JOIN
p2_capcodes AS c
ON cl.capcode = c.capcode
GROUP BY b.id, b.melding
');
?>
$gegevens = $mysqli->query('
SELECT
b.id,
b.melding,
b.datum,
GROUP_CONCAT(c.description SEPARATOR ', ') AS p2_capcodes
FROM
(SELECT id, melding, datum
FROM p2_brandweer
ORDER BY datum DESC
LIMIT 15) AS b
JOIN
p2_capcode_link AS cl
ON b.id = cl.id
JOIN
p2_capcodes AS c
ON cl.capcode = c.capcode
GROUP BY b.id, b.melding
');
?>
Krijg ik de error:
Warning: mysqli::query() expects parameter 2 to be long, string given in /home/foxcreat/domains/fox-creations.nl/public_html/p2000/load.php on line 122
[Nieuw probleem]
Ik wil nu ook nog graag dat hij alleen de records waar b.site = $_GET['site']. Hoe moet dat want gewoon een where werkt niet.
Gewijzigd op 29/12/2012 16:34:11 door Matthijs Vos