PFZ.nl - PHP Community: order by uit een andere tabel - Databases - Forum - PFZ.nl - PHP Community

Je kunt niet antwoorden op dit topic
#1 03-02-2012 17:33
  • Mike Gspot
  • Groep: Forumleden
  • Posts: 28
  • Actief sinds: 14-12-2004
Hallo,

Ik heb een klik script en die heeft de volgende tabellen.

Tabel: ads met de advertentie gegevens, zoals aId, omschrijving, hoeveel geklikt er nog over zijn, enz.

Tabel: ads_clicked met userid, advertentieid, datum&tijd.

Als iemand op een ad klikt, insert hij dus in de tabel ads_clicked het userid + aId en zet hij ook clicked op 1.

Wat ik wil is het volgende:

De ads ophalen en die orderen by niet geklikt.

Dus eerst de ads weergeven die niet geklikt zijn (die niet voorkomen in de tabel ads_clicked) en als laatste de geklikte ads (die wel in de tabel ads_clicked staan).

Ik heb al verschillende dingen geprobeerd met bijv left join, maar dit wil helaas niet helpen.

Bijv:


1
2
SELECT * FROM ads LEFT JOIN ads_clicked ON ads.aId = ads_clicked.aId   
WHERE aClicksLeft1 > 0 OR aClicksLeft2 > 0 OR aClicksLeft3 > 0 AND aApproved > 0 AND aPaused=0 AND aUpgraded=0 ORDER BY ads_clicked.clicked DESC

#2 03-02-2012 19:15
Als je data uit meerdere tabellen op haalt dien een gebruik te maken van de tabel verwijzing dan wel de alias die je aan de tabel hebt toegekend,

1
2
3
4
5
6
7
select a.b
,        b.a
from  appel a
inner join boterham b
           on a.id = b.id
order by
         b.a


dus ook geen select * maar gewoon de * vervangen door tabel/alias velden die je benodigd hebt.

#3 03-02-2012 19:34
  • Mike Gspot
  • Groep: Forumleden
  • Posts: 28
  • Actief sinds: 14-12-2004
ok dankjewel!

#4 03-02-2012 19:44
Nee, je moet die * na SELECT vervangen door daar te benoemen wat je daadwerkelijk nodig hebt!!
je hebt niets aan 2x een aId!! als je ze wel beide nodig hebt dan zal je er 1 een alias moeten geven anders weet je niet wat waar uitkomt.

#5 03-02-2012 21:49
  • Mike Gspot
  • Groep: Forumleden
  • Posts: 28
  • Actief sinds: 14-12-2004
Oke ik heb het nu zo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SELECT 
ads.aId,
ads.aCatagory, 
ads.counter,
ads.aClicksLeft1, 
ads.aClicksLeft2, 
ads.aClicksLeft3,
ads.aCountries,
ads.aName,
ads.aDesc,
ads.aUpgraded,
ads_clicked.clicked,
ads_clicked.userid,
ads_clicked.aId
FROM ads left JOIN ads_clicked ON ads.aId=ads_clicked.aId
WHERE 
ads.aUpgraded=0 AND 
ads.aClicksLeft1 > 0 OR 
ads.aClicksLeft2 > 0 OR 
ads.aClicksLeft3 > 0 AND 
ads.aApproved > 0 AND 
ads.aPaused=0 AND 
ads.aCatagory={$qc['ac_id']} 
ORDER BY ads_clicked.clicked


Dit laat alle ads zien en inderdaad ordered hij hem goed.
Het probleem is dat iedereen die geklikt heeft de ad als geklikt ziet, terwijl dit niet zou moeten.
Een where userid='$userid' werkt niet want dan krijgen de anderen geen resultaat, en ik alleen mijn geklikte ad als resultaat.
Dit moet dus niet.
Is hier een oplossing voor?

#6 04-02-2012 09:10
Je hebt nog steeds niet goed:
ads.aId
ads_clicked.aId

2x het zelfde veldnaam, terwijl ze uit verschillende tabellen komen, dus zal je er 1 een alias moeten geven

Je haalt alles op uit de tabel ads + de gelinkte records uit ads_clicked

Over dat laatste kan ik vrij kort zijn: als je alleen om de ads_clicked gaat waarom doe jij dan een LEFT JOIN. Verdiep je in JOINEN

En je kan wel degelijk in deze sitautie je userid erbij betrekken dan krijg je alle ads te zien daar waar je op geklikt hebt en daar waar je nog niet op geklikt hebt.

#7 04-02-2012 11:33
  • Mike Gspot
  • Groep: Forumleden
  • Posts: 28
  • Actief sinds: 14-12-2004
Hoi Robbert,

Allereerst heel erg bedankt voor je hulp.
Aleen, ik denk dat ik er zo echt niet uit ga komen.
Ik gebruik een left join omdat ik de tabel van ads wil laten zien, en de tabel ads_clicked er naast wil linken.
Misschien kan jij de query voor me maken zodat ik kan zien hoe het wel moet.

Ik zit er anders over te denken om gewoon als de ingelogde user op de ads pagina komt, dat hij dan maar alle ad-ids met clicked=0 te doen, misschien maakt het dat wat makkelijker

#8 04-02-2012 11:44
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007
Beste Mike,
Kun je de CREATE TABLE hier plaatsen i.p.v. externe links naar plaatjes (die na verloop van tijd weer verdwijnen)?
1
SHOW CREATE TABLE ads

1
SHOW CREATE TABLE ads_clicked

Kun je verder je posts intact laten en alleen wat toevoegen i.p.v. posts te herschrijven? Ik zie dat je dit met je vorige post hebt gedaan en gezien de reactie van Robbert is je eerdere post met enkel ok dankjewel! ook niet wat er aanvankelijk stond.

Als je dus iets wilt toevoegen, kun je dat zo doen:
EDIT: hier zet je dan je aanvulling

EDIT:
Dit is dus een echte toevoeging met een verwijzing naar onze huisregels waarin dit staat beschreven: http://www.pfz.nl/wi...acties-wijzigen
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar


Inloggen wachtwoord vergeten? Aanmelden