[mysql] delete query, kan dit?

Pagina: 1
Acties:
  • 109 views sinds 30-01-2008
  • Reageer

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Hey,

ik kan op dit moment nog niet testen of het kan, en ik weet haast wel zeker dat het niet kan (vraag me dus af hoe het wel moet in 1 query),

ik heb een boeken tabel en een users tabel.

in de boeken tabel bewaar ik de boeken van de users, en nu wil ik met 1 query alle boeken uit de boeken tabel gooien van de users waarbij het priority veld niet op 1 staat.

Ik dacht zelf aan het volgende, corrigeer me aub als dit fout is, of maak me blij als het goed is :)

DELETE FROM boeken INNER JOIN users on boeken.userid = users.id WHERE users.priority !='1'

  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 13:14

JaQ

In oracle zou het iets zijn als:

delete from boeken
where user_id in (select user_id from users
where priority != 1)

Suc6

Egoist: A person of low taste, more interested in themselves than in me


Verwijderd

hmm denk dat je zoiets krijgt als: users.id is ambigous

denk dat dit:
code:
1
2
3
4
5
6
7
8
DELETE FROM 
         boeken 
INNER JOIN 
         users 
      ON 
         boeken.userid = users.users.id 
WHERE 
         users.priority !=1

wel werkt...
DrFrankenstoner, mysql ondersteunt geen sub-selects

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
hmm woeitje, het enige verschil tussen die van jou en die van mij is dus 'users.users.id'?

kun je me 'users.users.id' misschien uitleggen, of is dat een typefout?

  • tomato
  • Registratie: November 1999
  • Niet online
Volgens mij kun je echt geen JOINS gebruiken in een DELETE query :?
Enige oplossing is volgens mij een subselect, of een sp, maar dan is het natuurlijk ook weer niet 1 query. Beiden worden niet door MySQL ondersteund. Je zult het dus in een externe uitvoerende taal moeten zoeken (aangezien MySQL nog geen interne procedurele taal kent, myPerl telt nog lang niet mee).

  • tomato
  • Registratie: November 1999
  • Niet online
Op donderdag 13 september 2001 17:12 schreef woeitje het volgende:
hmm denk dat je zoiets krijgt als: users.id is ambigous
Euh... er staat toch een keurige table reference?

Verwijderd

Op donderdag 13 september 2001 17:27 schreef tomato het volgende:

[..]

Euh... er staat toch een keurige table reference?
oeps....... ik wou iets te snel :) sorry...

maar of joins in delete query's werken.... nog nooit gebruikt.....
wat je kunt doen met mysql is:
eerst een select doen en alleen de user_id's terug krijgen
en die pleur je vervolgens in je delete query

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Op donderdag 13 september 2001 17:26 schreef tomato het volgende:
Volgens mij kun je echt geen JOINS gebruiken in een DELETE query :?
Enige oplossing is volgens mij een subselect, of een sp, maar dan is het natuurlijk ook weer niet 1 query. Beiden worden niet door MySQL ondersteund. Je zult het dus in een externe uitvoerende taal moeten zoeken (aangezien MySQL nog geen interne procedurele taal kent, myPerl telt nog lang niet mee).
Dan worden het waarschijnlijk een aantal queries (3 dus) in elkaar.

Ik pak eerst alle userids van de boeken (1e query),
dan pak ik binnen die query de priority van de user met dat userid (2e query), als de priority gelijk aan 1 is dan delete ik dat boek (3e query)

Ik heb dus zoiets:

pakquery {
pakquery2 {
deletequery{}
}
}

  • tomato
  • Registratie: November 1999
  • Niet online
Selecteer gewoon eerst alle boeken ID's die een user hebben met priority 1. Ik ken je tabelstructuur niet, dus een query kan ik je niet geven, maar als het goed is kun je dit gemakkelijk in 1 query doen (totaal worden er dus 2).

Verwijderd

doe een select zoals je die bovenin je voorbeeld joint.

bijv:
select users.id from boeken inner join users on boeken.userid = users.id where users.priority != 1

(ofzoiets)

dat doe je dmv een loopje netjes scheiden door komma's zodat je dit krijgt:

$in="1,65,689,346";

en dan:

delete from boeken where userid in ($in);

? als hier iets niet aan klopt dannuh..... hou ik 2dagen me mond op got ;)

  • FastWallie
  • Registratie: September 2001
  • Laatst online: 25-11-2024
mySQL zuigt als dat geen subselects aankan. Dat is een superkrachtig query mechanisme.

Oracle stijgt weer in aanzien.

http://www.jawal.nl


Verwijderd

Op donderdag 13 september 2001 23:35 schreef FastWallie het volgende:
mySQL zuit als dat geen subselects aankan. Dat is een superkrachtig query mechanisme.

Oracle stijgt weer in aanzien.
zucht... wat een antwoord :)
daarom kost oracle ook geld en mysql nie :P

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
ok thnx, het volgende werkt lekker:
$in="1,65,689,346";

en dan:

delete from boeken where userid in ($in);
Wat ik me nu afvraag he, ff een beetje offtopic, kun je het ook 'omdraaien'?

Als je bijv een veld in een tabel hebt waar het volgende in staat: 23,34,55

Kun je dan ook makkelijk in een query het volgende doen (query klopt natuurlijk niet, maar je snapt nu beter waar ik op doel):

select bla from bla where veld CONTAINS ($id)

als je bijv alles wilt pakken waarin 23 voorkomt in dat veld dan heb je $id = 23 nodig...

Verwijderd

Op vrijdag 14 september 2001 13:25 schreef Tangletje het volgende:
ok thnx, het volgende werkt lekker:
[..]

Wat ik me nu afvraag he, ff een beetje offtopic, kun je het ook 'omdraaien'?
je hoeft het niet om te draaien, wat jij probeert duidelijk te maken dat heb ik er al staan :)

mysql zal alles selecteren waar het id is wat tussen haakjes staat.

dus als uit je eerste select blijkt dat id
1
6
8

(uhm , wat was het, priority anders dan 1 ofzo...) een andere priority hebben, dan krijg je die id's terug.

Die zet je tussen comma's, en draait die door de query.

Je kan ook zeggen, ik wil juist alle andere records verwijderen, BEHALVE die geselecteerd zijn.

dan is het DELETE FROM boeken WHERE id NOT IN ($in)

snappie? ik begrijp niet zo goed wat je bedoeld met 'contains' .... maar mysql heeft daar IN voor.
Of je bedoelt LIKE... maar ik kan me niet voorstellen dat je daar een delete op wil gaan doen ;)

wat een verhaal.....
Pagina: 1