Hoe $GET je een column uit een andere tabel met dezelfde naam?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Snelle Jaap

Snelle Jaap

02/02/2016 12:49:39
Quote Anchor link
Ik heb een query waar ik de alias moet ophalen.

Dit is de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
$page
= "SELECT con.title, con.alias, con.images, con.introtext
FROM db_content con
LEFT JOIN db_categories cat ON con.catid = cat.id
WHERE cat.alias = '"
.$_GET['alias']."' AND con.state = 1 ORDER BY `ordering` DESC";
?>


Ik moet dus de alias ophalen uit db_categories, maar er is ook een column die alias heet in db_content. Nu heb ik het idee dat hij altijd die van db_content pakt, aangezien de query niks laat zien, tenzij ik er hardcoded een alias naam uit db_categories in zet.

Hoe los ik dit op?

Thx
 
PHP hulp

PHP hulp

29/03/2024 02:32:57
 
E vH

E vH

02/02/2016 12:57:48
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$page
= "SELECT con.title, con.alias as alias1, con.images, con.introtext
?>


"ORDER BY `ordering` DESC";"
klopt dit wel?
Gewijzigd op 02/02/2016 13:07:57 door E vH
 
Snelle Jaap

Snelle Jaap

02/02/2016 13:32:18
Quote Anchor link
Ja dat klopt, is gewoon een tabel met cijfers dus dit klopt gewoon.

De code die je hebt gepost werkt niet helaas.
 
E vH

E vH

02/02/2016 13:53:46
Quote Anchor link
Snelle Jaap op 02/02/2016 12:49:39:
Dit is de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
$page
= "SELECT con.title, con.alias, con.images, con.introtext
FROM db_content con
LEFT JOIN db_categories cat ON con.catid = cat.id
WHERE cat.alias = '"
.$_GET['alias']."' AND con.state = 1 ORDER BY `ordering` DESC";
?>


Ik moet dus de alias ophalen uit db_categories, maar er is ook een column die alias heet in db_content.
Nu heb ik het idee dat hij altijd die van db_content pakt

--> con.alias roep je ook aan in de query. roep dan ook cat.alias aan.


Quote:
Ja dat klopt , is gewoon een tabel met cijfers dus dit klopt gewoon.

moet dit niet con.ordering zijn of cat.ordering?
 
Ivo P

Ivo P

02/02/2016 14:20:40
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$page
= "SELECT con.title,
                con.alias conalias,
                con.images,
                con.introtext,
                cat.alias catalias
FROM db_content con
LEFT JOIN db_categories cat ON con.catid = cat.id
WHERE cat.alias = '"
.$_GET['alias']."'
  AND con.state = 1
ORDER BY ordering DESC"
;
?>


Toevoeging op 02/02/2016 14:22:26:

als ordering in beide tabellen voorkomt, zul je ook bij het noemen van die kolom de tabel erbij moeten zetten.

Dat er geen foutmelding is, geeft aan dat dat dus niet het geval is.

Wel vallen sommige typen database erover dat je sorteert op een kolom die niet in het SELECT-deel staat.
Mysql echter niet.
 
Snelle Jaap

Snelle Jaap

02/02/2016 16:06:47
Quote Anchor link
Ivo P op 02/02/2016 14:20:40:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$page
= "SELECT con.title,
                con.alias conalias,
                con.images,
                con.introtext,
                cat.alias catalias
FROM db_content con
LEFT JOIN db_categories cat ON con.catid = cat.id
WHERE cat.alias = '"
.$_GET['alias']."'
  AND con.state = 1
ORDER BY ordering DESC"
;
?>


Toevoeging op 02/02/2016 14:22:26:

als ordering in beide tabellen voorkomt, zul je ook bij het noemen van die kolom de tabel erbij moeten zetten.

Dat er geen foutmelding is, geeft aan dat dat dus niet het geval is.

Wel vallen sommige typen database erover dat je sorteert op een kolom die niet in het SELECT-deel staat.
Mysql echter niet.


Oke, en hoe zet ik het resultaat netjes in een foreachje? Ik heb al het een en ander geprobeerd, zonder resultaat.
 
Ivo P

Ivo P

02/02/2016 16:49:41
Quote Anchor link
om te beginnen, is het misschien wel handig om $_GET['alias'] door een escape functie te halen.

Je haalt nu iets uit de url, zonder maar te controleren of er gevaarlijke tekens in staan.
http://wiki.pfz.nl/sqlinjectie

daarna kun je door de resultaten loopen.
of foreach daarin handig is? ik zou eerder een while of desnoods een if gebruiken
 
Snelle Jaap

Snelle Jaap

03/02/2016 13:31:30
Quote Anchor link
Ik bedoel meer hoe ik alle resultaten netjes weergeef op de site. Escape is zo toegevoegd.
 
E vH

E vH

03/02/2016 13:43:30
Quote Anchor link
je doet je naam wel eer aan ;-)

"Ik heb al het een en ander geprobeerd, zonder resultaat"

Wat heb je al geprobeerd want een foreach opzetten lijkt me niet zo moeilijk...?
 
Snelle Jaap

Snelle Jaap

03/02/2016 13:56:28
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?
foreach($pagecr as $page){
    $landingnospace = str_replace(' ', '_', $page['alias']);
    $title = $page['title'];
    $contentje .= '<li><a href="http://www.website.nl/_extern/website1/'.$landingnospace.'.html">'.$title.'</a></li>';    
}

?>

Dit bijvoorbeeld, maar ik krijg alleen resultaat wanneer ik "hardcoded" een categorie naam erin zet, bijvoorbeeld 'info' ipv '".$_GET['alias']."'
 
E vH

E vH

03/02/2016 14:09:37
Quote Anchor link
echo je query ($page) is met de $_GET erin.
 
Snelle Jaap

Snelle Jaap

03/02/2016 14:19:12
Quote Anchor link
Als ik op info klik krijg ik deze query te zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
SELECT con.title, con.alias, con.images, con.introtext FROM db_content con LEFT JOIN db_categories cat ON con.catid = cat.id AND cat.alias = 'info' WHERE con.state = 1 ORDER BY `ordering` DESC  
?>

Dus dat is prima. Alleen als ik op een artikel klik ipv een categorie (artikelen zijn submenus, categorien zijn top level menus) krijg ik die alias te zien. Stel een artikel alias is product-10 dan krijg ik dit te zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
SELECT con.title, con.alias, con.images, con.introtext FROM db_content con LEFT JOIN db_categories cat ON con.catid = cat.id AND cat.alias = 'product-10' WHERE con.state = 1 ORDER BY `ordering` DESC
?>

Terwijl hij de categorie moet pakken waar product-10 onder valt.
Gewijzigd op 03/02/2016 14:19:52 door Snelle Jaap
 
Thomas van den Heuvel

Thomas van den Heuvel

03/02/2016 14:53:35
Quote Anchor link
Mogelijk geeft de laatstgenoemde query meerdere resultaten terug, je doet immers een LEFT JOIN?

En als je de (alias van de) categorie wilt hebben dan zou je toch de cat.alias moeten pakken, en niet de con.alias? Je hebt dan wel een naamconflict zoals je in je oorspronkelijke vraagstuk stelt, dit kun je oplossen door het introduceren van aliassen.

Gebruik in plaats van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT con.title, con.alias, con.images, con.introtext ...

zoiets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT con.title, con.alias AS content_alias, cat.alias AS category_alias, con.images, con.introtext ...

Dit is ook al voorgesteld door Ivo P, dus waar zit precies het probleem? Ik kan het vraagstuk ook niet helemaal volgen eerlijk gezegd. Wat dat betreft doe je je naam (inderdaad) eer aan :).

Orden je gedachten eens, kijk eens welke resultaten je allemaal terugkrijgt door deze af te drukken en bestudeer eens goed welke (relevante) data er precies in je database zit. Volgens mij kom je dan al een heel eind. Ik denk dat als je een voorbeeld geeft van de dataset(s) waarmee je werkt dat dan al heel snel duidelijk wordt waar het euvel zit.
 
E vH

E vH

03/02/2016 14:54:02
Quote Anchor link
dus als ik het goed begrijp:

eerste query zou dus moeten doen wat jij wilt.
tweede query moet dus een andere query krijgen?


"Ik denk dat als je een voorbeeld geeft van de dataset(s) waarmee je werkt dat dan al heel snel duidelijk wordt waar het euvel zit."

Dit is ook een optie inderdaad ;-)
Gewijzigd op 03/02/2016 14:56:21 door E vH
 
Snelle Jaap

Snelle Jaap

03/02/2016 16:07:06
Quote Anchor link
Elmar vH op 03/02/2016 14:54:02:
dus als ik het goed begrijp:

eerste query zou dus moeten doen wat jij wilt.
tweede query moet dus een andere query krijgen?


"Ik denk dat als je een voorbeeld geeft van de dataset(s) waarmee je werkt dat dan al heel snel duidelijk wordt waar het euvel zit."

Dit is ook een optie inderdaad ;-)


De 1e is idd zoals de query zou moeten zijn.

Ik heb nu twee tables

db_categories (hierin zitten categorien)

db_content (hierin zitten artikelen, die bij een categorie horen)

Beide hebben een column genaamd alias.

Als ik dus op mijn contentpage kom, wil ik dat alle artikelen geladen worden die horen bij die categorie (maar alleen als er op een categorie is geklikt), in een sidemenu, dat wou ik dus doormiddel van die foreach doen.

Stel ik heb een menu item met een drop down. De toplevel menu naam is info (dat is een categorie) en de submenu naam is informatie (dat is een artikel) als ik dus klik op info, wil ik dat hij links (alsin links/rechts) 'informatie' laat zien. En als ik klik op informatie moet hij niks laten zien.
 
Snelle Jaap

Snelle Jaap

04/02/2016 16:24:51
Quote Anchor link
Bump
 
Ivo P

Ivo P

04/02/2016 17:08:16
Quote Anchor link
niet dat het je iets helpt (heb geen zin om uit jouw tekst het probleem te puzzelen)

maar ik denk dat LEFT in je query overbodig is:

je stelt een eis aan cat.alias.
Dus de join MOET een matchend record hebben gevonden in je cat tabel.

dus daarmee is een goedkopere INNER JOIN dus genoeg.

--

Waarom beginnen je tabelnamen trouwens met db_?
 



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.